public class JavaManager extends JavaModel
JavaManager
is an implementation of the JavaFileProvider
interface. It provides structured access to the contents of Java class and source files visible through a Project
or through a set of source and classpaths.
There is also access to a JavaClassLocator
instance for searching for the classes and subpackages contained in a package, and for finding an URL associated with a Java source or class file.
By default, the JavaFile and JavaClass (as well as SourceFile and SourceClass) instances retrieved through this API saved in a cache. Clients are encouraged to use the provided CacheSupport
API to provide indication as to when the cache is used, and when it is no longer in use (and can be flushed). Clients can also force a cache flush to occur.
Modifier and Type | Class and Description |
---|---|
protected class |
JavaManager.TransactionCommand
A
Command implementation that wraps a committed transaction. |
JavaModel.CacheTracker
Modifier and Type | Field and Description |
---|---|
protected Project |
_project
The project associated with this JavaManager (if it is project based and not URL based.)
|
_cacheSupport, _classLocator, _fileProvider
Modifier | Constructor and Description |
---|---|
protected |
JavaManager(CachedFileProvider provider)
Protected constructor purposely.
|
Modifier and Type | Method and Description |
---|---|
SourceTransaction |
beginTransaction(SourceFile sourceFile)
Starts a transaction on the given sourceFile.
|
boolean |
commitTransaction(SourceTransaction openTransaction)
Commit the specified open transaction.
|
boolean |
commitTransaction(SourceTransaction openTransaction, java.lang.String undoText)
Commit the specified open transaction.
|
boolean |
commitTransaction(SourceTransaction openTransaction, TransactionDescriptor txnDescriptor)
Commit the specified open transaction.
|
boolean |
commitTransactionNoUndo(SourceTransaction openTransaction)
Commit the specified open transaction.
|
static JavaManager |
getAnyInstance(Project project)
Fetch a JavaManager instance in a fail-safe manner.
|
static JavaManager |
getAnyInstance(Workspace workspace, Project project)
Fetch a
JavaManager instance in a fail-safe manner in cases where the workspace or project may be unknown. |
static JavaManager |
getAnyJavaManager(Project project)
Fetch a JavaManager instance in a fail-safe manner.
|
static Library |
getDefiningLibrary(Context context, java.net.URL url)
Find the library that defines the given URL.
|
static Project |
getDefiningProject(Context context, java.net.URL url)
Finds the project that defines the specified URL.
The method searches the currentProject , the jdk libraries, the project's libraries, it will repeat the same search for the upstream dependencies and if it still not found, it will search all the other projects in the workspace. |
static java.util.List<Project> |
getDependencies(Project project) |
static JavaManager |
getInstance(Project project)
Fetch a JavaManager instance for the given project.
|
static JavaManager |
getInstance(URLPath sourcePath, URLPath classPath)
Fetch a JavaManager instance for the given source and class paths.
|
static JavaManager |
getInstance(Workspace workspace, Project project)
Fetch a
JavaManager instance for the given workspace and project. |
static JavaManager |
getJavaManager(Project project)
Fetch a JavaManager instance for the given project.
|
static JavaManager |
getJavaManager(URLPath sourcePath, URLPath classPath)
Fetch a JavaManager instance for the given source and class paths.
|
static boolean |
isDefinedIn(Project project, java.net.URL url) |
createSourceFile, finalize, getArrayType, getCacheSupport, getClass, getClass, getClassByVMName, getClassLoader, getClassLoader, getFile, getJavaClassLocator, getJdkVersion, getPackage, getSourceClass, getSourceFile, getSourceFile, getTextBuffer
protected Project _project
protected JavaManager(CachedFileProvider provider)
provider
- the provider that we wrappublic static JavaManager getInstance(Workspace workspace, Project project)
JavaManager
instance for the given workspace and project. This is the preferred method to obtain a JavaManager
instance, as it ensures that the correct workspace and project are always used. It returns an instance which uses the source and class paths for the supplied project.
The caller must ensure that the supplied workspace and project are not null
. If no workspace or project is available, the caller must not attempt to use the JavaManager
, or must use an alternative mechanism to obtain a suitable JavaManager
instance. For example, if a source file is open outside the context of any project or workspace, the caller might disable their menu commands which call into the JavaManager
. Alternatively, it may be suitable for the caller to use a JavaManager
instance which has access to the JDK classes. This can be done by calling getInstance(URLPath, URLPath)
with the default JDK source and class paths.
workspace
- the workspaceproject
- the projectJavaManager
instance for the specified projectjava.lang.NullPointerException
- if the workspace or project is null
public static JavaManager getAnyInstance(Workspace workspace, Project project)
JavaManager
instance in a fail-safe manner in cases where the workspace or project may be unknown. If the supplied worskpace or project is null
, this method will attempt to find a suitable alternative source and class path, using the following:
null
, an instance using the project paths is returned.null
, an instance using the active project paths is returned.null
, an instance using the default project paths is returned.Use of this method is not recommended except in cases where the caller does not have a context available containing the workspace and project. This method can result in the caller using the wrong source and class paths if a null
workspace or project is supplied. In particular, use of this method from a background thread is not recommended. If the user changes the active workspace or project while the background thread is running, the background thread could end up using the wrong paths. It is always better to use getInstance(Workspace,Project)
with an explicit workspace and project if possible. This method is essentially a workaround for cases where an API does not pass the correct workspace and project.
workspace
- the workspace (can be null
)project
- the project (can be null
)JavaManager
instance that is guaranteed to not be null
public static JavaManager getInstance(Project project)
project
- the project to use for locating Java source and class filesjava.lang.NullPointerException
- if project is nullpublic static JavaManager getInstance(URLPath sourcePath, URLPath classPath)
sourcePath
- the source path to use for locating Java source filesclassPath
- the class path to use for locating Java class filespublic static JavaManager getAnyInstance(Project project)
project
- the project to use, which can be nullpublic static JavaManager getJavaManager(Project project)
project
- the project to use for locating Java source and class filesjava.lang.NullPointerException
- if project is nullpublic static JavaManager getJavaManager(URLPath sourcePath, URLPath classPath)
sourcePath
- the source path to use for locating Java source filesclassPath
- the class path to use for locating Java class filespublic static JavaManager getAnyJavaManager(Project project)
project
- the project to use, which can be nullpublic SourceTransaction beginTransaction(SourceFile sourceFile)
JavaManager
will have IDE integration, such as undo registration and notifications.sourceFile
- the source file to start a transaction onpublic boolean commitTransaction(SourceTransaction openTransaction)
openTransaction
- the source transaction that is to be committedjava.lang.NullPointerException
- if the openTransaction is nullpublic boolean commitTransaction(SourceTransaction openTransaction, java.lang.String undoText)
openTransaction
- the source transaction that is to be committedundoText
- the (translateable) undo text to use for undojava.lang.NullPointerException
- if the openTransaction is nullpublic boolean commitTransactionNoUndo(SourceTransaction openTransaction)
openTransaction
- the source transaction that is to be committedjava.lang.NullPointerException
- if the openTransaction is nullpublic boolean commitTransaction(SourceTransaction openTransaction, TransactionDescriptor txnDescriptor)
The txnDescriptor is required, and provides additional information describing the transaction, such as a human-readable (translated) edit name to use for "Edit->Undo <name>". Refer to the JavaDoc for TransactionDescriptor
for more details.
openTransaction
- the source transaction that is to be committedtxnDescriptor
- the descriptor describing the transaction that is being committedjava.lang.NullPointerException
- if the openTransaction is nullpublic static Project getDefiningProject(Context context, java.net.URL url)
currentProject
, the jdk libraries, the project's libraries, it will repeat the same search for the upstream dependencies and if it still not found, it will search all the other projects in the workspace.url
- The url to find can be a source file, a class file or even a resourcepublic static Library getDefiningLibrary(Context context, java.net.URL url)
If the context contains a project, this will search all the libraries available to the current project, including the project JDK, project libraries, dependency project libraries, and application libraries. If there is no project in the context, but there is a workspace in the context, it will just search the application libraries for the workspace. If there is no current workspace and no current project, null
will be returned.
Note that the result can be either a JDK
or a JLibrary
, so use caution if type-casting the result.
context
- the contexturl
- the URLnull
if no library is foundpublic static boolean isDefinedIn(Project project, java.net.URL url)