blob: c8b3b5413b2b830741c45dfaac3974e5e63972d4 [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;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
/**
* A script project represents a view of a project resource in terms of DLTK
* elements such as script folders, types, methods and fields. A project may
* contain several project fragments, which contain script folders. A project
* fragment corresponds to an underlying folder or an archive (like JAR).
* <p>
* Each script project has a buildpath, defining which folders contain source
* code and where required libraries are located. <s>Each script project also
* has an output location, defining where the builder writes output files.</s> A
* project that references folders in another project can access the folders by
* including the required project in a buildpath entry. The DLTK model will
* present the source elements in the required project; <s>when building, the
* compiler will use the corresponding generated class files from the required
* project's output location(s))</s>. The buildpath format is a sequence of
* buildpath entries describing the location and contents of project fragments .
* </p>
* Script project elements need to be opened before they can be navigated or
* manipulated. The children of a script project are the project fragments that
* are defined by the buildpath and contained in this project (in other words,
* it does not include project fragments for other projects).
*
* The children (i.e. the project fragments) appear in the order they are
* defined by the buildpath. </p>
* <p>
* An instance of one of these handles can be created via
* <code>DLTKCore.create(project)</code>.
* </p>
*
* @see DLTKCore#create(org.eclipse.core.resources.IProject)
* @see IBuildpathEntry
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IScriptProject extends IModelElement, IOpenable, IParent {
/**
* Returns the <code>IProject</code> on which this
* <code>IScriptProject</code> was created. This is handle-only method.
*
* @return the <code>IProject</code> on which this
* <code>IScriptProject</code> was created
*/
IProject getProject();
/**
* Returns all of the project fragments contained in this project,
* identified on this project's resolved buildpath. The result does not
* include project fragments in other projects referenced on this project's
* buildpath.
*
* <p>
* NOTE: This is equivalent to <code>getChildren()</code>.
*
* @return all of the project fragments contained in this project,
* identified on this project's resolved buildpath
* @exception ModelException
* if this element does not exist or if an exception occurs
* while accessing its corresponding resource
*/
IProjectFragment[] getProjectFragments() throws ModelException;
/**
* Helper method for returning one option value only. Equivalent to
* <code>(String)this.getOptions(inheritDLTKCoreOptions).get(optionName)</code>
* Note that it may answer <code>null</code> if this option does not exist,
* or if there is no custom value for it.
* <p>
* For a complete description of the configurable options, see
* <code>DLTKCore#getDefaultOptions</code>.
* </p>
*
* @param optionName
* the name of an option
* @param inheritDLTKCoreOptions
* - boolean indicating whether DLTKCore options should be
* inherited as well
* @return the String value of a given option
* @see DLTKCore#getDefaultOptions()
*/
String getOption(String optionName, boolean inheritDLTKCoreOptions);
/**
* 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 DLTKCore global options for the workspace. A
* boolean argument allows to directly merge the project options with global
* ones from <code>DLTKCore</code>.
* <p>
* For a complete description of the configurable options, see
* <code>DLTKCore#getDefaultOptions</code>.
* </p>
*
* @param inheritDLTKCoreOptions
* - boolean indicating whether DLTKCore options should be
* inherited as well
* @return table of current settings of all options (key type:
* <code>String</code>; value type: <code>String</code>)
* @see DLTKCore#getDefaultOptions()
*
*/
Map<String, String> getOptions(boolean inheritDLTKCoreOptions);
/**
* Helper method for setting one option value only. Equivalent to
*
* <code>Map options = this.getOptions(false); map.put(optionName, optionValue); this.setOptions(map)</code>
* <p>
* For a complete description of the configurable options, see
* <code>DLTKCore#getDefaultOptions</code>.
* </p>
*
* @param optionName
* the name of an option
* @param optionValue
* the value of the option to set
* @see DLTKCore#getDefaultOptions()
*
*/
void setOption(String optionName, String optionValue);
/**
* 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.
* <p>
* For a complete description of the configurable options, see
* <code>DLTKCore#getDefaultOptions</code>.
* </p>
*
* @param newOptions
* the new options (key type: <code>String</code>; value type:
* <code>String</code>), or <code>null</code> to flush all custom
* options (clients will automatically get the global DLTKCore
* options).
* @see DLTKCore#getDefaultOptions()
*
*/
void setOptions(Map newOptions);
/**
* Returns a project fragment for the given resource, which must either be a
* folder representing the root of source folders, or <code>.zip</code>
* file. This is a handle-only method. The underlying resource may or may
* not exist.
*
* @param resource
* the given resource
* @return a project fragment for the given resource, which must either be a
* folder representing the top of source folders, or a
* <code>.zip</code> file
*/
IProjectFragment getProjectFragment(IResource resource);
/**
* Returns a package fragment root for the ZIP at the specified file system
* path. This is a handle-only method. The underlying
* <code>java.io.File</code> may or may not exist. No resource is associated
* with this local ZIP package fragment root.
*
* @param zipPath
* the jars's file system path
* @return a package fragment root for the JAR at the specified file system
* path
*/
IProjectFragment getProjectFragment(String zipPath);
/**
* Returns a project fragment for an external library or a source folder at
* the specified file system path. This is a handle-only method. The
* underlying <code>java.io.File</code> may or may not exist. No resource is
* associated with this local library package fragment root.
*
* @param path
* the library's file system path
* @return a package fragment root for the external library at the specified
* file system path
* @since 3.0
*/
IProjectFragment getProjectFragment(IPath path);
/**
* Sets the buildpath of this project using a list of buildpath entries.
*
* Setting the buildpath to <code>null</code> specifies a default buildpath
* (the project root). Setting the buildpath to an empty array specifies an
* empty buildpath.
* <p>
* If a cycle is detected while setting this buildpath, an error marker will
* be added to the project closing the cycle. To avoid this problem, use
* <code>hasBuildpathCycle(IBuildpathEntry[] entries)</code> before setting
* the buildpath.
* <p>
* This operation acquires a lock on the workspace's root.
*
* @param entries
* a list of buildpath entries
* @param monitor
* the given progress monitor
* @exception ModelException
* if the buildpath could not be set. Reasons include:
* <ul>
* <li> This model element does not exist
* (ELEMENT_DOES_NOT_EXIST)</li> <li> The buildpath is being
* modified during resource change event notification
* (CORE_EXCEPTION) <li> The buildpath failed the validation
* check
* </ul>
* @see IBuildpathEntry
*/
void setRawBuildpath(IBuildpathEntry[] entries, IProgressMonitor monitor)
throws ModelException;
/**
* Returns true if this is valid DLTK Project.
*
*/
public boolean isValid();
/**
* Decodes the buildpath entry that has been encoded in the given string in
* the context of this project. Returns null if the encoded entry is
* malformed.
*
* @param encodedEntry
* the encoded buildpath entry
* @return the decoded buildpath entry, or <code>null</code> if unable to
* decode it
*
*/
IBuildpathEntry decodeBuildpathEntry(String encodedEntry);
/**
* Encodes the given buildpath entry into a string in the context of this
* project.
*
* @param buildpathEntry
* the buildpath entry to encode
* @return the encoded buildpath entry
*
*/
public String encodeBuildpathEntry(IBuildpathEntry buildpathEntry);
IBuildpathEntry[] getRawBuildpath() throws ModelException;
/**
* This is a helper method returning the resolved buildpath for the project
* as a list of simple (non-variable, non-container) buildpath entries. All
* buildpath variable and buildpath container entries in the project's raw
* buildpath will be replaced by the simple buildpath entries they resolve
* to.
* <p>
* The resulting resolved buildpath is accurate for the given point in time.
* If the project's raw buildpath is later modified, or if buildpath
* variables are changed, the resolved buildpath can become out of date.
* Because of this, hanging on resolved buildpath is not recommended.
* </p>
*
* @param ignoreUnresolvedEntry
* indicates how to handle unresolvable variables and containers;
* <code>true</code> indicates that missing variables and
* unresolvable buildpath containers should be silently ignored,
* and that the resulting list should consist only of the entries
* that could be successfully resolved; <code>false</code>
* indicates that a <code>ModelException</code> should be thrown
* for the first unresolved variable or container
* @return the resolved buildpath for the project as a list of simple
* buildpath entries, where all buildpath variable and container
* entries have been resolved and substituted with their final
* target entries
* @exception ModelException
* in one of the corresponding situation:
* <ul>
* <li>this element does not exist</li>
* <li>an exception occurs while accessing its corresponding
* resource</li>
* <li>a buildpath variable or buildpath container was not
* resolvable and <code>ignoreUnresolvedEntry</code> is
* <code>false</code>.</li>
* </ul>
* @see IBuildpathEntry
*/
IBuildpathEntry[] getResolvedBuildpath(boolean ignoreUnresolvedEntry)
throws ModelException;
/**
* Returns the <code>IModelElement</code> corresponding to the given
* buildpath-relative path, or <code>null</code> if no such
* <code>IModelElement</code> is found. The result is one of an
* <code>ISourceModule</code>, <code>IClassFile</code>, or
* <code>IScriptFolder</code>.
* <p>
* When looking for a package fragment, there might be several potential
* matches; only one of them is returned.
*
* <p>
* For example, the path "java/lang/Object.java", would result in the
* <code>ISourceModule</code> corresponding to "java.lang.Object". The path
* "java/lang" would result in the <code>IScriptFolder</code> for
* "java.lang".
*
* @param path
* the given buildpath-relative path
* @exception ModelException
* if the given path is <code>null</code> or absolute
* @return the <code>IModelElement</code> corresponding to the given
* buildpath-relative path, or <code>null</code> if no such
* <code>IModelElement</code> is found
*/
IModelElement findElement(IPath path) throws ModelException;
/**
* Returns the <code>IModelElement</code> corresponding to the given
* buildpath-relative path, or <code>null</code> if no such
* <code>IModelElement</code> is found. The result is one of an
* <code>ISourceModule</code>, <code>IClassFile</code>, or
* <code>IScriptFolder</code>. If it is an <code>ISourceModule</code>, its
* owner is the given owner.
* <p>
* When looking for a package fragment, there might be several potential
* matches; only one of them is returned.
*
* <p>
* For example, the path "java/lang/Object.java", would result in the
* <code>ISourceModule</code> corresponding to "java.lang.Object". The path
* "java/lang" would result in the <code>IScriptFolder</code> for
* "java.lang".
*
* @param path
* the given buildpath-relative path
* @param owner
* the owner of the returned compilation unit, ignored if it is
* not a compilation unit.
* @exception ModelException
* if the given path is <code>null</code> or absolute
* @return the <code>IModelElement</code> corresponding to the given
* buildpath-relative path, or <code>null</code> if no such
* <code>IModelElement</code> is found
*
*/
IModelElement findElement(IPath path, WorkingCopyOwner owner)
throws ModelException;
/**
* Returns the first existing package fragment on this project's buildpath
* whose path matches the given (absolute) path, or <code>null</code> if
* none exist. The path can be: - internal to the workbench: "/Project/src"
* - external to the workbench: "c:/jdk/classes.zip/java/lang"
*
* @param path
* the given absolute path
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the first existing package fragment on this project's buildpath
* whose path matches the given (absolute) path, or
* <code>null</code> if none exist
*/
IScriptFolder findScriptFolder(IPath path) throws ModelException;
/**
* Returns the existing package fragment root on this project's buildpath
* whose path matches the given (absolute) path, or <code>null</code> if one
* does not exist. The path can be: - internal to the workbench:
* "/Compiler/src" - external to the workbench: "c:/jdk/classes.zip"
*
* @param path
* the given absolute path
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the existing package fragment root on this project's buildpath
* whose path matches the given (absolute) path, or
* <code>null</code> if one does not exist
*/
IProjectFragment findProjectFragment(IPath path) throws ModelException;
/**
* Returns the existing package fragment roots identified by the given
* entry. Note that a buildpath entry that refers to another project may
* have more than one root (if that project has more than on root containing
* source), and buildpath entries within the current project identify a
* single root.
* <p>
* If the buildpath entry denotes a variable, it will be resolved and return
* the roots of the target entry (empty if not resolvable).
* <p>
* If the buildpath entry denotes a container, it will be resolved and
* return the roots corresponding to the set of container entries (empty if
* not resolvable).
*
* @param entry
* the given entry
* @return the existing package fragment roots identified by the given entry
* @see IBuildpathContainer
*
*/
IProjectFragment[] findProjectFragments(IBuildpathEntry entry);
/**
* Returns the first type found following this project's buildpath with the
* given fully qualified name or <code>null</code> 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 compilation unit name. As a
* consequence, secondary types cannot be found using this functionality. To
* find secondary types use {@link #findType(String, IProgressMonitor)}
* instead.
*
* @param fullyQualifiedName
* the given fully qualified name
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the first type found following this project's buildpath with the
* given fully qualified name or <code>null</code> if none is found
* @see IType#getFullyQualifiedName(char)
*
*/
IType findType(String fullyQualifiedName) throws ModelException;
/**
* Same functionality as {@link #findType(String)} but also look for
* secondary types if given name does not match a compilation unit name.
*
* @param fullyQualifiedName
* the given fully qualified name
* @param progressMonitor
* the progress monitor to report progress to, or
* <code>null</code> if no progress monitor is provided
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the first type found following this project's buildpath with the
* given fully qualified name or <code>null</code> if none is found
* @see IType#getFullyQualifiedName(char)
*
*/
IType findType(String fullyQualifiedName, IProgressMonitor progressMonitor)
throws ModelException;
/**
* Returns the first type found following this project's buildpath with the
* given fully qualified name or <code>null</code> 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". If the returned type is part of a
* compilation unit, its owner is the given owner.
*
* Note that in order to be found, a type name (or its toplevel enclosing
* type name) must match its corresponding compilation unit name. As a
* consequence, secondary types cannot be found using this functionality. To
* find secondary types use
* {@link #findType(String, WorkingCopyOwner, IProgressMonitor)} instead.
*
* @param fullyQualifiedName
* the given fully qualified name
* @param owner
* the owner of the returned type's compilation unit
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the first type found following this project's buildpath with the
* given fully qualified name or <code>null</code> if none is found
* @see IType#getFullyQualifiedName(char)
*
*/
IType findType(String fullyQualifiedName, WorkingCopyOwner owner)
throws ModelException;
/**
* Same functionality as {@link #findType(String, WorkingCopyOwner)} but
* also look for secondary types if given name does not match a compilation
* unit name.
*
* @param fullyQualifiedName
* the given fully qualified name
* @param owner
* the owner of the returned type's compilation unit
* @param progressMonitor
* the progress monitor to report progress to, or
* <code>null</code> if no progress monitor is provided
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the first type found following this project's buildpath with the
* given fully qualified name or <code>null</code> if none is found
* @see IType#getFullyQualifiedName(char)
*
*/
IType findType(String fullyQualifiedName, WorkingCopyOwner owner,
IProgressMonitor progressMonitor) throws ModelException;
/**
* Returns the first type found following this project's buildpath with the
* given package name and type qualified name or <code>null</code> if none
* is found. The package name is a dot-separated name. The type qualified
* name is also a dot-separated name. For example, a class B defined as a
* member type of a class A should have the type qualified name "A.B".
*
* Note that in order to be found, a type name (or its toplevel enclosing
* type name) must match its corresponding compilation unit name. As a
* consequence, secondary types cannot be found using this functionality. To
* find secondary types use
* {@link #findType(String, String, IProgressMonitor)} instead.
*
* @param packageName
* the given package name
* @param typeQualifiedName
* the given type qualified name
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the first type found following this project's buildpath with the
* given package name and type qualified name or <code>null</code>
* if none is found
* @see IType#getTypeQualifiedName(char)
*
*/
IType findType(String packageName, String typeQualifiedName)
throws ModelException;
/**
* Same functionality as {@link #findType(String, String)} but also look for
* secondary types if given name does not match a compilation unit name.
*
* @param packageName
* the given package name
* @param typeQualifiedName
* the given type qualified name
* @param progressMonitor
* the progress monitor to report progress to, or
* <code>null</code> if no progress monitor is provided
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the first type found following this project's buildpath with the
* given fully qualified name or <code>null</code> if none is found
* @see IType#getFullyQualifiedName(char)
*
*/
IType findType(String packageName, String typeQualifiedName,
IProgressMonitor progressMonitor) throws ModelException;
/**
* Returns the first type found following this project's buildpath with the
* given package name and type qualified name or <code>null</code> if none
* is found. The package name is a dot-separated name. The type qualified
* name is also a dot-separated name. For example, a class B defined as a
* member type of a class A should have the type qualified name "A.B". If
* the returned type is part of a compilation unit, its owner is the given
* owner.
*
* Note that in order to be found, a type name (or its toplevel enclosing
* type name) must match its corresponding compilation unit name. As a
* consequence, secondary types cannot be found using this functionality. To
* find secondary types use
* {@link #findType(String, String, WorkingCopyOwner, IProgressMonitor)}
* instead.
*
* @param packageName
* the given package name
* @param typeQualifiedName
* the given type qualified name
* @param owner
* the owner of the returned type's compilation unit
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the first type found following this project's buildpath with the
* given package name and type qualified name or <code>null</code>
* if none is found
* @see IType#getTypeQualifiedName(char)
*
*/
IType findType(String packageName, String typeQualifiedName,
WorkingCopyOwner owner) throws ModelException;
/**
* Same functionality as {@link #findType(String, String, WorkingCopyOwner)}
* but also look for secondary types if given name does not match a
* compilation unit name.
*
* @param packageName
* the given package name
* @param typeQualifiedName
* the given type qualified name
* @param owner
* the owner of the returned type's compilation unit
* @param progressMonitor
* the progress monitor to report progress to, or
* <code>null</code> if no progress monitor is provided
* @exception ModelException
* if this project does not exist or if an exception occurs
* while accessing its corresponding resource
* @return the first type found following this project's buildpath with the
* given fully qualified name or <code>null</code> if none is found
* @see IType#getFullyQualifiedName(char)
*
*/
IType findType(String packageName, String typeQualifiedName,
WorkingCopyOwner owner, IProgressMonitor progressMonitor)
throws ModelException;
/**
* Returns the raw buildpath for the project as defined by its
* <code>.buildpath</code> file from disk, or <code>null</code> if unable to
* read the file.
* <p>
* This buildpath may differ from the in-memory buildpath returned by
* <code>getRawBuildpath</code>, in case the automatic reconciliation
* mechanism has not been performed yet. Usually, any change to the
* <code>.buildpath</code> 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 buildpath from disk can be
* read using this method, and further assigned to the project using
* <code>setRawBuildpath(...)</code>.
* </p>
* <p>
* Buildpath variable and buildpath container entries can be resolved using
* the helper method <code>getResolvedBuildpath</code>; buildpath variable
* entries also can be resolved individually using
* <code>DLTKCore#getBuildpathVariable</code>).
* </p>
* <p>
* Note that no check is performed whether the project has the script nature
* set, allowing an existing <code>.buildpath</code> file to be considered
* independantly (unlike <code>getRawBuildpath</code> which requires the
* script nature to be associated with the project).
* </p>
* <p>
* In order to manually force a project buildpath refresh, one can simply
* assign the project buildpath using the result of this method, as follows:
*
* <code>proj.setRawBuildpath(proj.readRawBuildpath(), proj.readOutputLocation(), monitor)</code>
* (note that the <code>readRawBuildpath/readOutputLocation</code> methods
* could return <code>null</code>).
* </p>
*
* @return the raw buildpath from disk for the project, as a list of
* buildpath entries
* @see #getRawBuildpath()
* @see IBuildpathEntry
*
*/
IBuildpathEntry[] readRawBuildpath();
/**
* Returns all of the existing project fragments that exist on the
* buildpath, in the order they are defined by the buildpath.
*
* @return all of the existing project fragments that exist on the buildpath
* @exception ModelException
* if this element does not exist or if an exception occurs
* while accessing its corresponding resource
*/
IProjectFragment[] getAllProjectFragments() throws ModelException;
public Object[] getForeignResources() throws ModelException;
/**
* Returns whether the given element is on the buildpath of this project,
* that is, referenced from a buildpath entry and not explicitly excluded
* using an exclusion pattern.
*
* @param element
* the given element
* @return <code>true</code> if the given element is on the buildpath of
* this project, <code>false</code> otherwise
* @see IBuildpathEntry#getInclusionPatterns()
* @see IBuildpathEntry#getExclusionPatterns()
*
*/
boolean isOnBuildpath(IModelElement element);
/**
* Returns whether the given resource is on the buildpath of this project,
* that is, referenced from a buildpath entry and not explicitly excluded
* using an exclusion pattern.
*
* @param resource
* the given resource
* @return <code>true</code> if the given resource is on the buildpath of
* this project, <code>false</code> otherwise
* @see IBuildpathEntry#getInclusionPatterns()
* @see IBuildpathEntry#getExclusionPatterns()
*
*/
boolean isOnBuildpath(IResource resource);
/**
* Creates and returns a type hierarchy for all types in the given region,
* considering subtypes within that region.
*
* @param monitor
* the given progress monitor
* @param region
* the given region
* @exception JavaModelException
* if this element does not exist or if an exception occurs
* while accessing its corresponding resource
* @exception IllegalArgumentException
* if region is <code>null</code>
* @return a type hierarchy for all types in the given region, considering
* subtypes within that region
*/
ITypeHierarchy newTypeHierarchy(IRegion region, IProgressMonitor monitor)
throws ModelException;
/**
* 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 compilation units in the
* workspace.
* <p>
* Note that if a working copy is empty, it will be as if the original
* compilation unit had been deleted.
* <p>
*
* @param monitor
* the given progress monitor
* @param region
* the given region
* @param owner
* the owner of working copies that take precedence over their
* original compilation units
* @exception JavaModelException
* if this element does not exist or if an exception occurs
* while accessing its corresponding resource
* @exception IllegalArgumentException
* if region is <code>null</code>
* @return a type hierarchy for all types in the given region, considering
* subtypes within that region
* @since 3.0
*/
ITypeHierarchy newTypeHierarchy(IRegion region, WorkingCopyOwner owner,
IProgressMonitor monitor) throws ModelException;
/**
* Creates and returns a type hierarchy for the given type considering
* subtypes in the specified region.
*
* @param type
* the given type
* @param region
* the given region
* @param monitor
* the given monitor
*
* @exception JavaModelException
* if this element does not exist or if an exception occurs
* while accessing its corresponding resource
*
* @exception IllegalArgumentException
* if type or region is <code>null</code>
* @return a type hierarchy for the given type considering subtypes in the
* specified region
*/
ITypeHierarchy newTypeHierarchy(IType type, IRegion region,
IProgressMonitor monitor) throws ModelException;
/**
* 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 compilation units in the
* workspace.
* <p>
* Note that if a working copy is empty, it will be as if the original
* compilation unit had been deleted.
* <p>
*
* @param type
* the given type
* @param region
* the given region
* @param monitor
* the given monitor
* @param owner
* the owner of working copies that take precedence over their
* original compilation units
*
* @exception JavaModelException
* if this element does not exist or if an exception occurs
* while accessing its corresponding resource
*
* @exception IllegalArgumentException
* if type or region is <code>null</code>
* @return a type hierarchy for the given type considering subtypes in the
* specified region
* @since 3.0
*/
ITypeHierarchy newTypeHierarchy(IType type, IRegion region,
WorkingCopyOwner owner, IProgressMonitor monitor)
throws ModelException;
public IScriptFolder[] getScriptFolders() throws ModelException;
public IDLTKLanguageToolkit getLanguageToolkit();
}