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 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)