This document lists changes made to the Project API.
Fuller descriptions of all changes can be found below (follow links).
Not all deprecations are listed here, assuming that the deprecated APIs continue to essentially work. For a full deprecation list, please consult the Javadoc.
ProjectActionContext
that can pass action-like environment to project queries
ProjectUtils.get/setActiveConfiguration
convenience methods
ActionProvider.COMMAND_PRIME
that initializes the project for IDE use.
ParentProjectProvider
and RootProjectProvider
to improve project hierarchy discovery
SourceGroupRelativeModifierImplementation
to improve source root creation
LookupMerger
for SharabilityQueryImplementation2
ProjectManager.Result
ProjectManager
ActionProgress
SourceGroup.contains
no longer throws IllegalArgumentException
LookupProviderSupport.createActionProviderMerger
factory method
ProjectIconAnnotator
MoveOrRenameOperationImplementation
CacheDirectoryProvider
@ProjectServiceProvider
and @LookupMerger.Registration
SingleMethod
ProjectUtils.getAuxiliaryConfiguration
These API specification versions may be used to indicate that a module requires a certain API feature in order to function. For example, if you see here a feature you need which is labelled 1.20, your manifest should contain in its main attributes the line:
OpenIDE-Module-Module-Dependencies: org.netbeans.modules.projectapi/1 > 1.20
ProjectActionContext
that can pass action-like environment to project queries
ProjectUtils.get/setActiveConfiguration
convenience methods
ActionProvider.COMMAND_PRIME
that initializes the project for IDE use.
ParentProjectProvider
and RootProjectProvider
to improve project hierarchy discovery
SourceGroupRelativeModifierImplementation
to improve source root creation
LookupMerger
for SharabilityQueryImplementation2
ProjectManager.Result
ProjectManager
ActionProgress
SourceGroup.contains
no longer throws IllegalArgumentException
LookupProviderSupport.createActionProviderMerger
factory method
ProjectIconAnnotator
MoveOrRenameOperationImplementation
CacheDirectoryProvider
@ProjectServiceProvider
and @LookupMerger.Registration
SingleMethod
ProjectUtils.getAuxiliaryConfiguration
org.netbeans.spi.project.ActionProgress
ActionProgress
org.netbeans.spi.project.ActionProvider
org.netbeans.spi.project.AuxiliaryProperties
org.netbeans.spi.project.DependencyProjectProvider
org.netbeans.api.project.FileOwnerQuery
org.netbeans.spi.project.LookupMerger
@ProjectServiceProvider
and @LookupMerger.Registration
org.netbeans.spi.project.LookupProvider
org.netbeans.spi.project.support.LookupProviderSupport
SourceGroupRelativeModifierImplementation
to improve source root creation
LookupMerger
for SharabilityQueryImplementation2
LookupProviderSupport.createActionProviderMerger
factory method
org.netbeans.spi.project.MoveOrRenameOperationImplementation
MoveOrRenameOperationImplementation
org.netbeans.api.project.ProjectActionContext
org.netbeans.spi.project.ProjectConfiguration
org.netbeans.spi.project.ProjectConfigurationProvider
org.netbeans.spi.project.ProjectContainerProvider
org.netbeans.spi.project.ProjectFactory2
org.netbeans.spi.project.ProjectIconAnnotator
ProjectIconAnnotator
org.netbeans.api.project.ProjectManager
ProjectManager.Result
ProjectManager
org.netbeans.spi.project.ProjectManagerImplementation
ProjectManager
org.netbeans.spi.project.ProjectServiceProvider
org.netbeans.api.project.ProjectUtils
ProjectUtils.get/setActiveConfiguration
convenience methods
CacheDirectoryProvider
ProjectUtils.getAuxiliaryConfiguration
org.netbeans.spi.project.SingleMethod
SingleMethod
org.netbeans.api.project.SourceGroup
org.netbeans.api.project.SourceGroupModifier
org.netbeans.spi.project.SourceGroupModifierImplementation
ProjectActionContext
that can pass action-like environment to project queries
ProjectActionContext
; made by: sdedic
ProjectActionContext
can be used
to inform various project queries about the intended action or environment for which the value is requested. This
contract is optional for query implementors.
ProjectUtils.get/setActiveConfiguration
convenience methods
ProjectUtils
; made by: sdedic
Clients do not need to interact with Project's Lookup and ProjectConfigurationProvider directly, handling missing provider and mutex; they can use the convenience API method.
ActionProvider.COMMAND_PRIME
that initializes the project for IDE use.
ActionProvider.COMMAND_PRIME
was introduced, so that
projects can declare (and enable/disable as needed) an action that "primes" or initializes the project for the IDE. That often includes
downloads, or partial build, which may produce messages, and could be automated by project-opening code.
ParentProjectProvider
and RootProjectProvider
to improve project hierarchy discovery
ParentProjectProvider
and
RootProjectProvider
with correspondig
utility methods in RootProjectProvider
to improve project hierarchy discovery.
SourceGroupRelativeModifierImplementation
to improve source root creation
LookupProviderSupport
; made by: sdedic; issues:
#253355
In presence of multiple source roots, e.g. several source folders, or test folders, some of them may be more related to the
LookupMerger
for SharabilityQueryImplementation2
LookupProviderSupport
; made by: tzezula; issues:
#253355
Added a factory method into the LookupProviderSupport
creating a
LookupMerger
for SharabilityQueryImplementation2
.
ProjectManager.Result
ProjectManager
; made by: tstupka; issues:
#244126
Introduced ProjectManager.Result.getDisplayName()
and ProjectManager.Result.getProjectType()
to provide more information about a potential project via ProjectManager.isProject2(FileObject)
.
ProjectManager
ProjectManagerImplementation
ProjectManager
; made by: tzezula; issues:
#210465
Added a SPI internface for ProjectManager
allowing
different implementations of ProjectManager
DependencyProjectProvider
ProjectContainerProvider
ProjectUtils
; made by: mkleint; issues:
#210465
Newly introduced interfaces DependencyProjectProvider
and ProjectContainerProvider
are meant as less general replacement for SubprojectProvider
as they explicitly declaring their contract
(DependencyProjectProvider
the project's dependency projects and ProjectContainerProvider
projects that are build as part of this project). Code using SubprojectProvider
currently
should evaluate if DependencyProjectProvider
or ProjectContainerProvider
contracts suit their usage better. Please note that the new interfaces are not
mandatory for project types to implement and if it's missing, SubprojectProvider
should be used.
LookupProviderSupport
; made by: mkleint; issues:
#200711
Introducing method LookupProviderSupport.createCompositeLookup(Lookup, Lookup)
which is a more freeform variant of
already existing method. The first parameter is expected to be the base lookup containing instances to be found in project lookup,
the second parameter is a lookup containing just LookupProvider
s.
FileOwnerQuery
; made by: mkleint; issues:
#212015
Introducing constant FileOwnerQuery.UNOWNED
, a pseudoproject indicating just that a directory is definitely unowned. May
be returned by either
FileOwnerQueryImplementation.getOwner
, in which case null is returned from
FileOwnerQuery.getOwner
. May also be passed to either
FileOwnerQuery.markExternalOwner
overload, in which case the standard directory search will be pruned at this point with no result.
ActionProgress
ActionProgress
; made by: jglick; issues:
#71515
A new callback was added permitting the invoker of a project action to be notified when the action completes.
ActionProvider
implementations should call the
new progress listener if possible.
SourceGroup.contains
no longer throws IllegalArgumentException
SourceGroup
; made by: jglick; issues:
#204271
For convenience and safety, the contains
method no longer throws an unchecked exception;
it proved infeasible to ensure the precondition even in the face of projects
being renamed or deleted or similar dynamic changes to directory structure.
Implementations previously throwing this exception should just return false now instead. Callers previously catching the exception, or making a special effort to ensure the precondition, no longer need do so.
LookupProviderSupport.createActionProviderMerger
factory method
LookupProviderSupport
; made by: tzezula; issues:
#201737
Added LookupProviderSupport.createActionProviderMerger
factory method to
create a LookupMerger
for merging multiple instances of ActionProvider
in the project's Lookup
.
ActionProvider
; made by: yardus; issues:
#203519
In order to be able to fully integrate the profiler with the project infrastructure
it is necessary to add three new constants to
ActionProvider
SPI for profiling a project, profiling a single file and
profiling a test for single file.
ProjectIconAnnotator
ProjectIconAnnotator
; made by: jbecicka; issues:
#171516
A mechanism for changing the project node icon. You can use it for example to add a badge to the project's icon.
MoveOrRenameOperationImplementation
MoveOrRenameOperationImplementation
; made by: jglick; issues:
#183680
Extended interface giving projects the ability to implement a simple display name change more safely and efficiently.
Existing implementations of MoveOperationImplementation
should be revised to implement the extended interface.
CacheDirectoryProvider
ProjectUtils
; made by: jglick; issues:
#168414
Added ProjectUtils.getCacheDirectory
to complement
the SPI interface CacheDirectoryProvider
.
SourceGroupModifier
SourceGroupModifierImplementation
; made by: mkleint; issues:
#102711
SourceGroupModifier
provides ways of create specific folders (SourceGroup
root folders)
in case they don't exist, eg. cannot be retrieved from Sources
.
The project supporting automated creation of SourceGroup root folders needs to
provide SourceGroupModifierImplementation
in the project's lookup.
@ProjectServiceProvider
and @LookupMerger.Registration
ProjectServiceProvider
LookupMerger
; made by: jglick; issues:
#150194
Added annotations to register entries to project lookup individually.
These can be used instead of implementing a LookupProvider
.
Since the entries are loaded on demand, this can help avoid needless class loading.
Implementations of LookupProvider
should be converted wherever possible.
ProjectManager
ProjectFactory2
; made by: mkleint; issues:
#153923
Introducing ProjectFactory2
that extends ProjectFactory
and return ProjectManager.Result
instead of a simple boolean value.
Also add ProjectManager.isProject2(FileObject)
method that can be used by
3rd party modules that need a fast (yet not 100% reliable) way of finding the project icon for a folder.
LookupProvider
; made by: mkleint; issues:
#152392
Add annotation @LookupProvider.Registration to replace registration in layer files.
SingleMethod
SingleMethod
; made by: mpetras; issues:
#137191
Added class SingleMethod
,
which represents identification of a single method/function
in a file. The new class also contains new constants
(COMMAND_RUN_SINGLE_TEST_METHOD
and
COMMAND_DEBUG_SINGLE_TEST_METHOD
) corresponding
to commands for running debugging test methods.
ProjectUtils.getAuxiliaryConfiguration
ProjectUtils
; made by: jglick; issues:
#136333
A new API method was introduced to match the AuxiliaryConfiguration
SPI interface. The change simplifies caller code, provides a path for future
changes in the SPI, and allows project types to avoid providing an explicit
implementation of this SPI if the fallback implementation suffices for their needs.
Modules which formerly looked for AuxiliaryConfiguration
directly in project lookup are strongly encouraged to migrate to the
new method instead.
ProjectUtils
AuxiliaryProperties
; made by: jlahoda; issues:
#134580
Added new API method ProjectUtils.getPreferences
and new SPI interface AuxiliaryProperties
.
LookupProvider
LookupMerger
LookupProviderSupport
; made by: mkleint; issues:
#83343
Added interfaces and support classes that can be used to compose the project's lookup
from multiple 3rd party sources. Framework for creating merged instances included.
LookupMerger
implementation for Sources
added.
ProjectConfiguration
ProjectConfigurationProvider
; made by: jglick; issues:
#49652
Added an interface ProjectConfigurationProvider
which can be included in a project's lookup to support
switchable configurations / profiles.
Introduced:
New method notifyDeleted
added to ProjectState
.
Interfaces DataFilesProviderImplementation, DeleteOperationImplementation, CopyOperationImplementation, MoveOperationImplementation has
been added to support project delete/copy/rename/move.
Support class ProjectOperations has been added to simplify operations on compound projects.
It is possible to register owner of an individual file using FileOwnerQuery.markExternalOwner
.
It is possible to register owner of a folder or file using URI, so the folder or file does not
have to exist at the time of registration.
This changes add a new method FileOwnerQuery.markExternalOwner(URI, FileObject, int)
,
and also extends sematics of the existing
FileOwnerQuery.markExternalOwner(FileObject, FileObject, int)
method to allow registration
of individual files.
To indicate that this is now considered a stable API, the major release version was incremented to 1 from 0.
Clients should begin requesting the new version to avoid a warning at startup.