Introduction

This document lists changes made to the Open APIs. Please ask on the dev@openide.netbeans.org mailing list if you have any questions about the details of a change, or are wondering how to convert existing code to be compatible.

Most module authors should start by reading the Upgrade Guide for the current release.

Also of interest: raw API differences between NetBeans 3.4.1 and 3.5 as generated by JDiff. This list only shows visible changes in class and method signatures and Javadoc comments, but does not cover all semantic changes in the APIs during this period, nor does it exclude changes with no semantic effect (such as adding an undocumented method override to a subclass).

In general the NetBeans core API team has several responsibilities:

  1. Avoid incompatible changes to the APIs whenever possible. This refers to both literal incompatibilities to the signatures of accessible API classes (including both source compatibility and binary compatibility, which sometimes differ); and semantic incompatibilities, for example changes in threading behavior of a method call.
  2. Document all API changes, incompatible or compatible, in this document, with proper explanation of the change and timestamp, and document the changes at the same time the actual change is made.
  3. Maintain API documentation so that it is up-to-date with respect to the actual APIs, both in prose documentation and Javadoc. When an API feature is ambiguously described, clarify the documentation to state precisely what it is expected to do; it is acceptable to specify that some aspect of its behavior is undefined, provided this is explicitly documented. If a feature is publicly accessible only for unavoidable technical reasons, document that this is so, and who is permitted to actually make use of it.
  4. Annotate new APIs with their time of addition: in Javadoc using the @since tag, or as appropriate in prose. The annotation should include both the date, and the current OpenIDE specification version, to make it easy for module authors to depend on the new API.
  5. Announce API changes on the mailing list; incompatible changes must be announced in advance to give any users of the old API a chance to veto the change.
  6. Be prepared to publicly explain the meaning and intended use of an API feature, and defend changes to it if requested.
  7. Assist anyone posting to the mailing list in fixing their code to be compatible with a change, if this is necessary and desired.
  8. Provide a workaround to restore compatibility for a previously incompatible API change, if this is requested on the mailing list and deemed feasible.
  9. Minimize the size of the APIs by rejecting compatible changes which substantially increase complexity and are not strictly needed.
  10. Attempt to maintain an API design which permits interesting and useful changes to be compatible.
  11. Attempt to cluster incompatible changes into infrequent batches of changes, specified and discussed well in advance, to be applied when making a new major release of the IDE. This should be done to remove previously deprecated features with a longstanding better alternative, and otherwise to enhance the clarity, consistency, and flexibility of the APIs.
  12. Make changes only on the trunk, not stabilization branches. When an API change is required in a stabilization branch to support an important bug fix, explicitly mention that in this document. (Bug fixes to API-related code not affecting its signature or documented semantics may be made at any time.)
  13. Increase the OpenIDE specification version listed in the core whenever a compatible API change is made, if some module is also being changed to take advantage of a newer API. The module should then list a dependency on the newer specification version in its manifest, to ensure that the newer version of the module is not accidentally run on an API-older core. Confirm that the specification version is also bumped up both before and after a branch is made which affects the APIs, to ensure that API changes can be cleanly ordered relative to branch points.
  14. Document API change in migration guide if the API change is significant and requires attention of module writers. The migration guide can be found at openide/api/doc/org/openide/doc-files/upgrade.html

What do the Dates Mean?

The supplied dates indicate when the API change was made, on the CVS trunk. From this you can generally tell whether the change should be present in a given build or not; for trunk builds, simply whether it was made before or after the change; for builds on a stabilization branch, whether the branch was made before or after the given date. In some cases corresponding API changes have been made both in the trunk and in an in-progress stabilization branch, if they were needed for a bug fix; this ought to be marked in this list.


Index of APIs

Incompatible changes by date

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.

All changes by date

Changes by version

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-IDE-Dependencies: IDE/1 > 1.20

Changes by affected class

org.openide.actions.AbstractCompileAction

org.openide.filesystems.AbstractFileSystem

org.openide.util.lookup.AbstractLookup

org.openide.nodes.AbstractNode

org.openide.actions.ActionManager

org.openide.awt.Actions

org.openide.actions.AddWatchAction

org.openide.text.Annotatable

org.openide.text.Annotation

org.openide.cookies.ArgumentsCookie

org.openide.util.AsyncGUIJob

org.openide.nodes.BeanChildren

org.openide.explorer.view.BeanTreeView

org.openide.actions.BuildAction

org.openide.actions.BuildAllAction

org.openide.actions.BuildProjectAction

org.openide.util.actions.CallableSystemAction

org.openide.util.actions.CallbackSystemAction

org.openide.util.Cancellable

org.openide.util.CharacterArrayCharacterIterator

org.openide.nodes.Children

org.openide.explorer.propertysheet.editors.ChoicePropertyEditor

org.openide.src.ClassElement

org.openide.actions.CleanAction

org.openide.actions.CleanAllAction

org.openide.text.CloneableEditor

org.openide.text.CloneableEditorSupport

org.openide.windows.CloneableOpenSupport

org.openide.windows.CloneableTopComponent

org.openide.compiler.CompilationEngine

org.openide.actions.CompileAction

org.openide.actions.CompileAllAction

org.openide.actions.CompileProjectAction

org.openide.compiler.Compiler

org.openide.cookies.CompilerCookie

org.openide.compiler.CompilerGroup

org.openide.compiler.CompilerJob

org.openide.loaders.CompilerSupport

org.openide.util.ContextAwareAction

org.openide.util.ContextGlobalProvider

org.openide.options.ContextSystemOption

org.openide.options.ControlPanel

org.openide.nodes.CookieSet

org.openide.actions.CopyAction

org.openide.actions.CutAction

org.openide.text.DataEditorSupport

org.openide.loaders.DataFolder

org.openide.loaders.DataLoader

org.openide.loaders.DataLoaderPool

org.openide.loaders.DataNode

org.openide.loaders.DataObject

org.openide.loaders.DataObjectFilter

org.openide.loaders.DataShadow

org.openide.cookies.DebuggerCookie

org.openide.actions.DebugProjectAction

org.openide.nodes.DefaultHandle

org.openide.explorer.propertysheet.DefaultPropertyModel

org.openide.actions.DeleteAction

org.openide.modules.Dependency

org.openide.DialogDescriptor

org.openide.DialogDisplayer

org.openide.explorer.propertysheet.editors.DirectoryOnlyEditor

org.openide.text.DocumentLine

org.openide.cookies.EditorCookie

org.openide.text.EditorSupport

org.openide.cookies.ElementCookie

org.openide.explorer.propertysheet.editors.ElementFormatEditor

org.openide.xml.EntityCatalog

org.openide.loaders.Environment

org.openide.ErrorManager

org.openide.cookies.ExecCookie

org.openide.loaders.ExecSupport

org.openide.actions.ExecuteAction

org.openide.actions.ExecuteProjectAction

org.openide.loaders.ExecutionSupport

org.openide.explorer.ExplorerActions

org.openide.explorer.ExplorerManager

org.openide.explorer.ExplorerPanel

org.openide.explorer.propertysheet.ExPropertyEditor

org.openide.explorer.propertysheet.ExPropertyModel

org.openide.loaders.ExtensionList

org.openide.loaders.ExtensionListEditor

org.openide.explorer.propertysheet.editors.ExternalCompiler

org.openide.compiler.ExternalCompiler

org.openide.compiler.ExternalCompilerGroup

org.openide.filesystems.FileAttributeEvent

org.openide.explorer.propertysheet.editors.FileEditor

org.openide.loaders.FileEntry

org.openide.filesystems.FileEvent

org.openide.filesystems.FileObject

org.openide.explorer.propertysheet.editors.FileOnlyEditor

org.openide.filesystems.FileRenameEvent

org.openide.filesystems.FileStateInvalidException

org.openide.filesystems.FileSystem

org.openide.actions.FileSystemAction

org.openide.filesystems.FileUtil

org.openide.util.enum.FilterEnumeration

org.openide.nodes.FilterNode

org.openide.actions.FinishDebuggerAction

org.openide.loaders.FolderInstance

org.openide.loaders.FolderLookup

org.openide.actions.GoAction

org.openide.actions.GoToCursorAction

org.openide.actions.HelpAction

org.openide.util.HelpCtx

org.openide.awt.HtmlBrowser

org.openide.util.HttpServer

org.openide.explorer.propertysheet.editors.IconEditor

org.openide.explorer.propertysheet.editors.IdentifierArrayEditor

org.openide.modules.IllegalModuleException

org.openide.text.IndentEngine

org.openide.nodes.Index

org.openide.nodes.IndexedCustomizer

org.openide.explorer.propertysheet.InplaceEditor

org.openide.windows.InputOutput

org.openide.modules.InstalledFileLocator

org.openide.util.lookup.InstanceContent

org.openide.cookies.InstanceCookie

org.openide.loaders.InstanceDataObject

org.openide.loaders.InstanceSupport

org.openide.actions.InstantiateAction

org.openide.windows.IOProvider

org.openide.filesystems.JarFileSystem

org.openide.LifecycleManager

org.openide.text.Line

org.openide.explorer.view.ListTableView

org.openide.loaders.LoaderTransfer

org.openide.filesystems.LocalFileSystem

org.openide.util.Lookup

org.openide.util.LookupEvent

org.openide.util.LookupListener

org.openide.util.lookup.Lookups

org.openide.modules.ManifestSection

org.openide.awt.MenuBar

org.openide.explorer.view.MenuView

org.openide.explorer.propertysheet.editors.MethodParameterArrayEditor

org.openide.filesystems.MIMEResolver

org.openide.awt.Mnemonics

org.openide.explorer.propertysheet.editors.ModifierEditor

org.openide.modules.ModuleDescription

org.openide.modules.ModuleInfo

org.openide.modules.ModuleInstall

org.openide.loaders.MultiDataObject

org.openide.loaders.MultiFileLoader

org.openide.filesystems.MultiFileSystem

org.openide.util.Mutex

org.openide.util.NbBundle

org.openide.execution.NbClassLoader

org.openide.text.NbDocument

org.openide.execution.NbfsStreamHandlerFactory

org.openide.execution.NbProcessDescriptor

org.openide.util.datatransfer.NewType

org.openide.nodes.Node

org.openide.util.actions.NodeAction

org.openide.nodes.NodeOp

org.openide.nodes.NodeOperation

org.openide.explorer.view.NodeTableModel

org.openide.NotifyDescriptor

org.openide.actions.OpenProjectAction

org.openide.loaders.OpenSupport

org.openide.windows.OutputEvent

org.openide.windows.OutputListener

org.openide.windows.OutputWriter

org.openide.actions.PasteAction

org.openide.util.datatransfer.PasteType

org.openide.Places

org.openide.text.PositionRef

org.openide.text.PrintSettings

org.openide.execution.ProcessExecutor

org.openide.cookies.ProjectCookie

org.openide.util.actions.ProjectSensitiveAction

org.openide.explorer.propertysheet.PropertyDialogManager

org.openide.explorer.propertysheet.PropertyEnv

org.openide.explorer.propertysheet.PropertyPanel

org.openide.nodes.Node.PropertySet

org.openide.explorer.propertysheet.PropertySheet

org.openide.explorer.propertysheet.PropertySheetSettings

org.openide.util.lookup.ProxyLookup

org.openide.util.RE

org.openide.util.ReaderCharacterIterator

org.openide.util.RECompiler

org.openide.filesystems.Repository

org.openide.filesystems.RepositoryAdapter

org.openide.loaders.RepositoryNodeFactory

org.openide.util.RequestProcessor

org.openide.util.RESyntaxException

org.openide.util.io.SafeException

org.openide.actions.SaveAsTemplateAction

org.openide.actions.SaveProjectAction

org.openide.execution.ScriptType

org.openide.ServiceType

org.openide.explorer.propertysheet.SetDefaultValueAction

org.openide.cookies.SourceCookie

org.openide.modules.SpecificationVersion

org.openide.actions.StartDebuggerAction

org.openide.awt.StatusDisplayer

org.openide.actions.StepOutAction

org.openide.util.StreamCharacterIterator

org.openide.explorer.propertysheet.editors.StringArrayCustomEditor

org.openide.explorer.propertysheet.editors.StringArrayCustomizable

org.openide.explorer.propertysheet.editors.StringArrayEditor

org.openide.util.StringCharacterIterator

org.openide.util.actions.SystemAction

org.openide.options.SystemOption

org.openide.util.Task

org.openide.loaders.TemplateWizard

org.openide.actions.ToggleBreakpointAction

org.openide.awt.Toolbar

org.openide.awt.ToolbarPool

org.openide.actions.ToolsAction

org.openide.windows.TopComponent

org.openide.TopManager

org.openide.util.TopologicalSortException

org.openide.actions.TraceIntoAction

org.openide.actions.TraceOverAction

org.openide.explorer.view.TreeTableView

org.openide.explorer.view.TreeView

org.openide.src.Type

org.openide.explorer.propertysheet.editors.TypeEditor

org.openide.loaders.UniFileLoader

org.openide.filesystems.URLMapper

org.openide.util.UserQuestionException

org.openide.util.Utilities

org.openide.util.WeakListener

org.openide.util.WeakListeners

org.openide.windows.WindowManager

org.openide.WizardDescriptor

org.openide.loaders.XMLDataObject

org.openide.filesystems.XMLFileSystem

org.openide.xml.XMLUtil


Details of all changes by API and date


Actions API

Actions can be run directly in event thread

Aug 25 '03; API spec. version: 4.11; affected top-level classes: ActionManager CallableSystemAction; made by: jglick; issues: #35755

In an attempt to migrate all actions in NetBeans to be run directly in the event thread, as Swing actions normally are, CallableSystemAction gets a new method asynchronous(). By default it is true, meaning to still use the request processor to run the action, but subclasses and new code should override this to be false (and then expect to be called from the event thread).

Correspondingly, ActionManager.invokeAction(Action, ActionEvent) is deprecated and just delegates directly to Action.actionPerformed(ActionEvent).


Compatibility:

There are possible semantic incompatibilities introduced by this change.

  1. Actions directly extending SystemAction or Action, not CallableSystemAction, will begin running in the event thread, whereas before they ran in a request processor.

  2. Code calling ActionManager.invokeAction expecting it not to block will now need to handle the action possibly running synchronously.

  3. It is now generally enforced that Action.actionPerformed be called from the event thread (relevant e.g. from a template wizard iterator).

  4. For simplicity and consistency with Swing, the controller (generally a view) is expected to ensure that an action is enabled before calling actionPerformed. Typically if it is disabled and an attempt was made to call the action, you should use Toolkit.beep.

  5. Miscellaneous properties of an action (most significantly, its enablement status) should be modified (or changes notified) from the event thread.

ActionManager.getDefault() added

Mar 18 '03; API spec. version: 4.2; affected top-level classes: ActionManager; made by: jglick; issues: #32092
This method should be more convenient than looking for an instance in lookup. Also there is a simple implementation for standalone use available.

org.openide.actions.InstantiateAction deprecated

Feb 27 '03; API spec. version: 3.42; affected top-level classes: InstantiateAction; made by: dkonecny; issues: #27135
This action was used only as default action on templates. It instantiates the template when it was double clicked in the Options dialog. This behaviour was changed and action is not useful anymore. It is deprecated and it usage should be avoided. Part of the deprecatation was that org.openide.loadersDataNode.getDefaultAction() does not return this action on templates anymore.

New Actions system - part I.

Jan 21 '03; API spec. version: 3.32; affected top-level classes: TopComponent; made by: pzavadsky; issues: #30231

According to changes in action system (see the change 3.29), also the method TopComponent.getSystemActions() is replaced by TopComponent.getActions() method.

New Actions system - part I.

Jan 8 '03; API spec. version: 3.29; affected top-level classes: ContextAwareAction Utilities TopComponent CallbackSystemAction NodeAction CutAction CopyAction DeleteAction PasteAction FileSystemAction ToolsAction Actions Node AbstractNode NodeOp; made by: jtulach pzavadsky; issues: #27868

Introduction of new action system, which generally means move from usage of SystemAction to Action instances. Look at general proposal. That document also focuses on declarative actions usage which is not subject of current change, it will be part of later changes.

Current change is described by description of already implemented changes which also summarizes these API changes.

Enhanced the org.openide.awt.MenuBar to understand Components.

Jul 15 '02; API spec. version: 3.2; affected top-level classes: MenuBar; made by: pnejedly
This is not the Java API change but rather a change in treating of the content of the folder from which the MenuBar is built. Prevoiusly only folders were recognized and turned into top-level menus. Now also Component instances found in the folder are directly added to the resulting MenuBar and Presenter.Toolbar instances are asked for the presentation component and added to the MenuBar.

Action manager can invoke actions in request processor

Oct 6 '00; affected top-level classes: ActionManager
Method invokeAction added to the ActionManager. It allows all actions code to happen in one request processor.

SystemAction refers to Icon rather than ImageIcon

Apr 11 '00; affected top-level classes: SystemAction; made by: jglick
getIcon and setIcon now use the interface Icon rather than the particular implementation ImageIcon. This corrects an API bug (excessive specificity).
Compatibility: First broken, later restored binary compatibility in trunk and boston. Any code explicitly using this calls before may break (source code may be compatible in many cases; binary compatibility has been preserved). These calls were known to be used only for Actions to create presenters; normal code which constructs SystemActions and implements iconResource should be unaffected. Actions using the "grouping action" template should check their getMenuPresenter method which may be binary-incompatible; it is easy to replace the code with safer code such as:

// ....
private static Icon icon = null;
// ....
public JMenuItem getMenuPresenter() {
    JMenu menu = new JMenu(getName ());
    if (icon == null) {
        icon = new ImageIcon(MyAction.class.getResource(iconResource()));
    }
    menu.setIcon(icon);
    // ....

Binary-compatible

Can create textual icons for actions

Mar 23 '00; affected top-level classes: SystemAction; made by: jglick
iconResource may now return null to indicate no icon. getIcon(true) may be used to get an icon created from the label if there is no icon specified.

SaveAsTemplateAction.iconResource removed

Mar 23 '00; affected top-level classes: SaveAsTemplateAction
iconResource was accidentally a public method; no longer needed, and deprecated. Technically backwards incompatible, but no one should have been calling this method as public, as it was protected in the superclass SystemAction.
Compatibility: First removed, later re-added but deprecated in trunk and boston.

ActionManager added

Mar 14 '00; affected top-level classes: ActionManager ToolsAction TopManager
Class ActionManager added, along with TopManager.getActionManager. This class replaces the functionality of ToolsAction.Model and ToolsAction.setModel which have been deprecated. No one other than ToolsAction and the core implementation ought to have been directly using the model class, and the same applies to the new action manager.
Compatibility: ToolsAction model first removed, later re-added but deprecated in trunk and boston.

Compiler API (historical)

CompilationEngine.getDefault added, TopManager.getCompilationEngine deprecated

Apr 24 '02; API spec. version: 2.16; affected top-level classes: CompilationEngine; made by: dstrupl; issues: #20539
As an ongoing effort to move from TopManager to separete smaller APIs we deprecate the method TopManager.getCompilationEngine and move the functionality to CompilationEngine.getDefault and register the engines with lookup.

Timestamps added to Compiler API

Apr 23 '02; API spec. version: 2.16; affected top-level classes: Compiler CompilerJob; made by: dkonecny; issues: #19668
Two new methods has been added to Compiler API: protected Date Compiler.getTimeStamp() and punlic CompilerJob.isUpToDate(Date).

Cannot override attachment of compiler listeners

May 19 '01; affected top-level classes: CompilerGroup; made by: jglick
addCompilerListener and removeCompilerListener made final.
Binary-compatible

Methods notifyError and parseErrors added into ExternalCompilerGroup

May 12 '01; API spec. version: 1.34; affected top-level classes: ExternalCompilerGroup; made by: anovak; issues: #13319
These two should serve as a hooks into the ExternalCompilerGroup class. Appropriate for compilers that does not obey any usual form of printing errors, i.e. they first print a file and then all bugs in that file, or native OS's filesystem (OpenVMS) is too strange to just construct file from a given string.

Can specify JDK home to external compilers

Apr 13 '01; affected top-level classes: ExternalCompilerGroup
Tag public static final String TAG_JDKHOME added to the ExternalCompilerGroup.Format class.

ExternalCompiler.isUpToDate protected, not public

Mar 9 '00; affected top-level classes: ExternalCompiler; made by: jglick
isUpToDate made protected instead of public, closing an API bug (it overrides a protected method and code calling it as public was erroneous).
Compatibility: First broken, later restored binary compatibility in trunk and boston. In recommended coding style, an instance of the class would be constructed but then assigned to a variable, or otherwise used, as an instance of the interface type (Compiler); in this case it would be impossible to accidentally call the isUpToDate method.
Binary-compatible

Datasystems API (historical)

Added EditorCookie.Observable interface allowing listening on document state changes

Feb 26 '03; API spec. version: 3.40; affected top-level classes: EditorCookie; made by: dkonecny; issues: #31101
Added EditorCookie.Observable interface which extends EditorCookie. It defines several properties which can be listen for changes. Client can use them to learn that document was closed, modified state of document has changed and that list of panes in which the document is opened has changed. All editors which implemented EditorCookie are now encouraged to implement directly EditorCookie.Observable. The CloneableEditorSupport provides all necessary implementation.

InstanceDataObject.instanceOf permits whitespace

Jan 28 '03; API spec. version: 3.34; affected top-level classes: InstanceDataObject; made by: pkuzel

InstanceDataObject recognizes whitespace as a token separator in the instanceOf file attribute for .instance files in XML layers.

Added DataLoader.getRepresentationClassName

Dec 18 '02; API spec. version: 3.25; affected top-level classes: DataLoader; made by: jglick
The method DataLoader.getRepresentationClassName was added. It should behave similarly to DataLoader.getRepresentationClass, but not require the class to be loaded.

Added Environment.findSettingsContext

Oct 11 '02; API spec. version: 3.13; affected top-level classes: Environment; made by: jpokorsky; issues: #27303
Environment has been extended to provide a JNDI context containing settings (former file attributes) for a particular DataObject. Modules can plug own implementation of the context in by registering Environment.Provider which provides a javax.naming.Context object in its lookup.

Streamlined DataShadow syntax

Jun 12 '02; API spec. version: 2.23; affected top-level classes: DataShadow; made by: phrebejk
There is new way of creating DataShadows (links) it is possible now to create link using empty file of length zero. This file has to have two attributes originalFile and originalFileSystem. The values have to be of type String. Second attribute can be omitted in this case only the filesystem on which the link resides is searched to find the linked file.

Target name of a template wizard may not be set

Jun 11 '02; affected top-level classes: TemplateWizard; made by: jglick
The bean property TemplateWizard.targetName may now legally be null. In fact it was always null until set, and template wizard iterators would see a null value if they used a custom second panel.
Compatibility: While this is an incompatible change from the API standpoint, in fact it is just a change of the Javadoc to match the actual behavior of existing code.

Better way for an object to provide TemplateWizard.Iterator

Apr 23 '02; API spec. version: 2.13; affected top-level classes: TemplateWizard; made by: jtulach; issues: #8858
TemplateWizard.Iterator now implements Node.Cookie and TemplateWizard.getIterator(DataObject) now first checks for the cookie.

InstanceDataObject.create can specify whether a new file should be created

Mar 15 '02; API spec. version: 2.9; affected top-level classes: InstanceDataObject; made by: jpokorsky; issues: #21083
Added InstanceDataObject.create with parameter create specifying whether a new file should be created or an existing should be reused.

Create settings instances with associated module information

Jul 31 '01; API spec. version: 1.28; affected top-level classes: InstanceDataObject; made by: jpokorsky
Added InstanceDataObject.create allowing creation of a settings data object annotated by a ModuleInfo.

Static methods to get or set preferred loader for a file

Jul 14 '01; affected top-level classes: DataLoaderPool
Added public static methods to set/get preferred loader and DataLoader.markFile changed to used them. Now any loader can check if it is the preferred or not. Also it is possible to unset preferred loader.

Retrieving the environment of an environment provider is passed a data object

Jul 10 '01; API spec. version: 1.22; affected top-level classes: Environment
Function public Lookup getEnvironment () of Environment.Provider interface was changed to public Lookup getEnvironment(DataObject obj).
Compatibility: Change of experimental feature.

Support for clipboard operations on data objects

Jul 9 '01; API spec. version: 1.21; affected top-level classes: LoaderTransfer
Added LoaderTransfer class to allow clipboard operations on DataObjects. It is similar to the NodeTransfer class allowing clipboard operations for nodes.

Get a cookie via a data shadow

Jun 25 '01; API spec. version: 1.16; affected top-level classes: DataObject
Added DataObject.getCookie (DataShadow shadow, Class clazz) to notify data objects that a cookie is requested via its shadow.

Deprecated XMLDataObject.createEditorCookie

Jun 15 '01; affected top-level classes: XMLDataObject; made by: pkuzel
Deprecated createEditorCookie() method.
Compatibility: Subclasses should use cookie set factories.

Folders can be first-class data object entries

Jun 13 '01; API spec. version: 1.13; affected top-level classes: FileEntry
Support for folders being used as entries of MultiDataObjects with FileEntry.Folder.

Folders are now multi data objects

Jun 13 '01; API spec. version: 1.13; affected top-level classes: DataFolder DataShadow
DataFolder extends MultiDataObject instead of DataObject, backward compatibility is ensured. Original constructor accepting DataLoader was preserved and deprecated. Behavior of Move operation has been changed to make it compatible with Copy, both of them now merge folders if they exist in the target location. Similarly for DataShadow.

InstanceSupport provides InstanceCookie.Of

Jun 12 '01; API spec. version: 1.12; affected top-level classes: InstanceSupport
InstanceSupport now implements InstanceCookie.Of.

Added FolderLookup

Jun 6 '01; API spec. version: 1.11; affected top-level classes: FolderLookup
FolderLookup created that allows to create an instance of lookup from objects in a folder.

Folder instances can use any data object container

Jun 6 '01; API spec. version: 1.11; affected top-level classes: FolderInstance
Now the folder instance can be constructed not just on data folders, but on any container because of constructor FolderInstance (DataObject.Container). Also a protected InstanceCookie acceptContainer (DataObject.Container) has been added to allow subclasses to accept subcontainers.

Find a data container rather than folder for a file folder

Jun 6 '01; API spec. version: 1.11; affected top-level classes: DataFolder
DataFolder.findContainer method added to allow the use of the folder recognition mechanism without constructing the folder itself.

Initialize data loader with name of unresolved representation class

Jun 5 '01; API spec. version: 1.10; affected top-level classes: DataLoader MultiFileLoader UniFileLoader
Added new constructor protected DataLoader(String representationClassName) to allow deferment of loading and resolving DataObject classes.

MultiDataObject's cookie set protected not public

May 19 '01; affected top-level classes: MultiDataObject; made by: jglick
getCookieSet and setCookieSet now protected, not public. Logically they should never have been public, since each object is responsible for providing its own set of cookies as it sees fit, and making it possible for anyone to retrieve and modify its cookie set without its explicit permission violates this modularity. Also setCookieSet deprecated.
Compatibility: Subclasses of MultiDataObject can continue to expose their cookie sets to outside classes if they wish by using e.g.:
/*package-private*/ CookieSet getCookieSet0() {
    return getCookieSet();
}
This is useful for DataEditorSupport especially. Code which expected to obtain the cookie set for arbitrary foreign data objects cannot be so easily fixed and should be redesigned.
Binary-compatible

Instances in folders can be created asynchronously

Apr 27 '01; API spec. version: 1.5; affected top-level classes: FolderInstance
FolderInstance.postCreationTask (Runnable) allows subclasses to create the instances in different thread.

Added InstanceCookie.Of

Apr 25 '01; API spec. version: 1.4; affected top-level classes: InstanceCookie
Added new class to enable better checking whether a cookie provides object of given class.

Data loader can declare default name and actions

Mar 28 '01; affected top-level classes: DataLoader
Two new methods added to get default display name and actions: Getters getDisplayName(), getActions() modified to return defaults if there are no changes.
Serialization changed to store only changes; if display name (or actions) does not change from default, null will be stored. Integer object representing version will be stored too.
Deserialization changed - after reading object (display name or actions) setDisplayName(String) (or setActions(SystemAction[])) will be called only if read object differs from default.

Create a compiler job for a set of data objects

Mar 20 '01; affected top-level classes: CompilerSupport
CompilerSupport.prepareJob added to simplify the creation of CompilerJob for set of data objects.

DataObject.Container added and used

Mar 1 '01; affected top-level classes: DataObject DataFolder DataShadow
DataObject.Container interface added and DataFolder and DataShadow changed to implement it. Every other data object that contains another objects is supposed to implement it too.

Template wizards can signal an invalid state

Jan 15 '01; affected top-level classes: TemplateWizard
TemplateWizard.instantiate can throw IllegalStateException to signal that the file provided is not OK. For example the Java wizard can check whether the file name is a valid Java identifier.

Cut/copy of data nodes can be overridden

Nov 27 '00; affected top-level classes: DataNode
canCopy and canCut made non-final.

Multi file loader better handles new or removed secondary files

Aug 17 '00; affected top-level classes: MultiDataObject MultiFileLoader UniFileLoader; made by: jtulach

Changes in MultiDataObject, MultiFileLoader, and UniFileLoader to handle the problem when X.java exists and X.form is created (in such situation JavaDataObject is discarded and form created) and also the situation when (later) the X.form is deleted, so FormDataObject is discarded and JavaDataObject created.

To better optimize the speed I made a small API addition. I added the method MultiDataObject.Entry.isImportant whose return value is used by the data object to correctly notify the filesystem if the file object is not important and also for not doing enhanced consistency tests for unimportant files (for example when X.class is deleted). I also override the method in FileEntry.Numb to return false (that is the reason why X.class is ignored).

Extension lists can include MIME types

Jul 12 '00; affected top-level classes: ExtensionList
ExtensionList now supports not only extensions but also MIME types. This allows anybody using UniFileLoader to recognize files based on MIME type and not on extension.

Data shadows can be made with custom extensions

Jun 28 '00; affected top-level classes: DataShadow; made by: jglick
More amenable to subclassing: you may specify an extension to use in create, and that extension should be honored in future operations on the file. deserialize is now available as a protected method; it now just returns the original data object, rather than a new shadow based on it. (If you want the shadow you must create it yourself with the constructor.)

Inner loaders of DataLoaderPool made inaccessible

Jun 26 '00; affected top-level classes: DataLoaderPool; made by: jglick
Made several inner classes inaccessible: These classes were only public for purposes of serialization (the requirement that loaders be public to be serialized was later removed).
Compatibility: First broken, later restored binary compatibility in trunk and boston. All classes were documented in Javadoc to be public only due to serialization, so any outside code referring to them was already erroneous.
Binary-compatible

Template descriptions should be treated as URLs not resource paths

Jun 25 '00; affected top-level classes: TemplateWizard; made by: jglick
Getting/setting template description as resource string no longer supported, since the new nbrescurrloc URL protocol handles that adequately. Although the methods getDescriptionAsResource and setDescriptionAsResource were deprecated, probably no one refers to them at runtime anyway; the old file attribute is still recognized and automatically upgraded to a URL attribute.
Compatibility: First removed, later re-added but deprecated in trunk and boston.

ExtensionListEditor removed

Apr 4 '00; affected top-level classes: ExtensionListEditor
ExtensionListEditor removed from the APIs (now in an implementation package providing property editors). No one should have been referring to this class directly.
Compatibility: First deleted, then on Oct 27 '00 re-added but deprecated, also in boston.

Creation of data folder node children may be overridden

Mar 27 '00; affected top-level classes: DataFolder
createNodeChildren no longer final.

Can request to show file extensions in data nodes

Mar 9 '00; affected top-level classes: DataNode; made by: jglick
Methods getShowFileExtensions and setShowFileExtensions added.

Editor API

New getInputStream() method in CloneableEditorSupport

Jun 26 '03; API spec. version: 4.7; affected top-level classes: CloneableEditorSupport; made by: pjiricka; issues: #34692
New method that returns an InputStream which reads the current data from the editor, taking into account the encoding of the file. The returned InputStream contains the same data as if the file was written out to the disk. Useful when interacting with a tool that expects an InputStream, and the current (possibly modified) content of the editor is desired.

CloneableEditorSupport takes Lookup for its Lines in constructor

Apr 18 '03; API spec. version: 4.5; affected top-level classes: CloneableEditorSupport; made by: jtulach; issues: #32937
Allows subclasses of the support DataEditorSupport, etc. pass additional information to each of its Lines. Such information can consist of location like DataObject or FileObject.

PositionRef.getEditorSupport() removed

Apr 2 '03; API spec. version: 4.3; affected top-level classes: PositionRef DataEditorSupport; made by: jtulach; issues: #32143
For a long time deprecated PositionRef.getEditorSupport() method has been removed to enabled separation of EditorSupport to openide-loaders.jar

Line.getDataObject() removed

Apr 2 '03; API spec. version: 4.3; affected top-level classes: Line DataEditorSupport; made by: jtulach; issues: #32143
Due to separation of openide-loaders.jar the Line.getDataObject() method had to be removed and replaced by Line.getLookup which provides more general way for providing line context. The direct replacement for the old method is DataObject DataEditorSupport.findDataObject(Line).

Line constructor changed

Apr 2 '03; API spec. version: 4.3; affected top-level classes: Line DocumentLine; made by: jtulach; issues: #32143
Due to separation of openide-loaders.jar the Line and DocumentLine constructors taking DataObject had to be modified to take Lookup or plain Object instead.

CloneableEditorSupport can provide display name for its Lines

Apr 2 '03; API spec. version: 4.3; affected top-level classes: CloneableEditorSupport; made by: jtulach; issues: #32143
Added method String messageLine (Line) that can be overriden to provide meaningful display name for lines produced by this support.

Added to javadoc an IndexOutOfBoundsException can be thrown from NbDocument.findLineOffset method

Oct 31 '01; affected top-level classes: NbDocument; issues: #17144
Added declaration to javadoc of the method NbDocument.findLineOffset() can throw an unchecked IndexOutOfBoundsException. The method could throw the exception also before (and also other kinds of them see the issue), but it was not declared in javadoc. This change makes it compliant to use with standard Swing text package and also with Line.Set.getCurrent() method.

Notifications about annotation attaching/detaching added

Oct 12 '01; API spec. version: 1.38; affected top-level classes: Annotation
Added protected methods Annotation.notifyAttached() and Annotation.notifyDetached().

Get content of Annotatable

Sep 25 '01; API spec. version: 1.35; affected top-level classes: Annotatable
Added public abstract method Annotatable.getText(). Listeners can be attached to Annotatable.PROP_TEXT property.

Annotatable.isDeleted and Annotatable.getAnnotationCount are final

Sep 25 '01; API spec. version: 1.35; affected top-level classes: Annotatable
The Annotatable.isDeleted and Annotatable.getAnnotationCount are final now.
Compatibility: This is not considered as incompatible change, because the API with these methods was not published yet.

Get attached annotatables, move them to front

Jul 25 '01; API spec. version: 1.27; affected top-level classes: Annotation
Added public final methods Annotation.getAttachedAnnotatable() and Annotation.moveToFront().

Line methods deprecated in favor of annotations

Jul 9 '01; API spec. version: 1.20; affected top-level classes: Line DocumentLine
Because of publication of Annotation API, all previously used methods like setBreakpoint, isBreakpoint, markError, unmarkError, markCurrentLine, unmarkCurrentLine, and canBeMarkedCurrent are deprecated. Use Annotation.attach() and detach() instead. Line now extends Annotatable abstract class.

New annotations API published

Jul 9 '01; API spec. version: 1.20; affected top-level classes: Annotation Annotatable NbDocument
Annotation API was published.
Compatibility: Because of publication of Annotation API, all previously used NbDocument methods like markError, markCurrent, markNormal are deprecated. Use addAnnotation and removeAnnotation instead.

Customization of editor support after creation

Dec 1 '00; affected top-level classes: CloneableEditorSupport; made by:
Added method initializeCloneableEditor to allow easier customization of the editor after creation and also after deserialization.

Can control undo/redo on editor supports

Jul 21 '00; affected top-level classes: CloneableEditorSupport
getUndoRedo() method was made protected final instead of final.

Can control title format for editor supports

Jul 17 '00; affected top-level classes: CloneableEditorSupport
updateTitles() method was made protected final instead of private.

IndentEngine a service type

Jun 23 '00; affected top-level classes: IndentEngine
Now a ServiceType. A few new methods relating to lookup.
Compatibility: Until Sep 27 '00, was incompatible (register had been deleted as it is no longer useful); the method was then restored but made deprecated.

Refactoring of editor and open supports

May 29 '00; affected top-level classes: EditorSupport CloneableEditorSupport CloneableEditor OpenSupport CloneableOpenSupport
Major refactoring of EditorSupport and OpenSupport, so that subclasses can have much finer control over pieces of its functionality. See a special section about this change.
Compatibility: First broken, Sep 29 '00 restored backwards compatibility.

Setting colors for lines deprecated

Mar 27 '00; affected top-level classes: NbDocument
NbDocument.COLORS and NbDocument.Colors deprecated.
Compatibility: First removed, later re-added but deprecated in trunk and boston. These classes were long disused (and should only have ever been used by the editor module anyway, which did not need them).

PrintSettings.getPageFormat requires a printer job

Feb 24 '00; affected top-level classes: PrintSettings
getPageFormat method now requires a PrinterJob argument.
Compatibility: First removed, later re-added but deprecated in trunk and boston. User-stored settings of this class should be backwards compatible, however code directly calling getPageFormat will produce a deprecation warning. Probably no one should be directly referring to this class or its BeanInfo outside the package; public only because it is a system option that must be public to appear.

Execution API (historical)

ExecutionEngine.getDefault added, TopManager.getExecutionEngine deprecated

Apr 24 '02; API spec. version: 2.16; affected top-level classes: CompilationEngine; made by: dstrupl; issues: #20538
As an ongoing effort to move from TopManager to separete smaller APIs we deprecate the method TopManager.getExecutionEngine and move the functionality to ExecutionEngine.getDefault and register the engines with lookup.

Incremental replacement of environment variables when launching process

Jun 23 '01; API spec. version: 1.15; affected top-level classes: NbProcessDescriptor; made by: jglick
Overload of exec accepting parameter appendEnv added to permit incremental replacement of environment variables.

Executors may be configured to append environment variables

Jun 23 '01; API spec. version: 1.15; affected top-level classes: ProcessExecutor; made by: jglick
Bean property appendEnvironmentVariables added.

May specify JDK home in ProcessExecutor

Apr 13 '01; affected top-level classes: ProcessExecutor
Tag public static final String TAG_JDKHOME added to the ProcessExecutor.Format class.

May add variable bindings to script types

Aug 3 '00; affected top-level classes: ScriptType
Method public abstract void addVariable(String name, Object value); added.

ScriptType added

Jul 31 '00; affected top-level classes: ScriptType
ScriptType, a new subclass of org.openide.ServiceType, was added. It should support execution of scripts written in scripting languages. The scripting module depends on it.

Change in default permission for NbClassLoader

Jun 28 '00; affected top-level classes: NbClassLoader
setDefaultPermissions(PermissionCollection) added. These permissions will be used in PermissionCollection getPermissions(CodeSource). Which is in turn used in ClassLoader.defineClass(..., ProtectionDomain). So the supplied permissions are used for ProtectionDomains of newly created classes.
Compatibility: This change may be incompatible for some users: NbClassLoader is not always trusted now, so you may want to add some permissions to allow loaded classes to execute checked operations. This does not apply to NbClassLoaders created with InputOutput, since it has AllPermission by default.

Resource URL protocols and hook for other protocols added

Jun 24 '00; affected top-level classes: NbfsStreamHandlerFactory; made by: jglick
Now handles not only nbfs protocol, but four resource-based protocols. Also, external code may insert support for additional protocols.

Explorer API

Copy, Cut, Paste and Delete Action Factory

Aug 12 '03; API spec. version: 4.10; affected top-level classes: ExplorerActions ExplorerPanel ExplorerManager; made by: jtulach; issues: #34758
As part of the work on separation of openide.jar into smaller parts the existing ExplorerActions class and ExplorerPanel are being deprecated and replaced by new factory methods in ExplorerManager class. Use them to create actions handling copy, cut, paste and delete on given ExplorerManager.

Additional hints for boolean, Boolean properties

Apr 4 '03; API spec. version: 4.3; made by: tboudreau; issues: #32619
Properties of type boolean or Boolean can now supply the following hint to the property editor: stringValues - a String[2] which will be used to replace the standard "true" or "false" displayed in the editor.

Additional hints for int,Integer properties

Apr 4 '03; API spec. version: 4.3; made by: tboudreau; issues: #20736 #5278 #31879
Properties representing instances of int or Integer can now supply the following hints to their property editors: stringKeys, intValues, codeValues. The String[] keys will be displayed in a drop down in the propertysheet; the int[] values are used when a key of the corresponding index is selected; the optional codeValues String[] can be used to supply custom text to getJavaInitializationString() for code generation. This replaces the functionality of the now deprecated ChoicePropertyEditor.

Additional hints for String properties

Mar 26 '03; API spec. version: 4.2; made by: tboudreau; issues: #29294
Properties representing String instances can now supply the following additional hints: oneline, suppressCustomEditor and instructions. These affect the behavior of the custom editor if invoked. If these hints are not supplied, behavior will be the same as it always was.

MenuView.MenuItem implements HelpCtx.Provider

Feb 13 '03; API spec. version: 3.38; affected top-level classes: MenuView; made by: pnejedly
The HelpCtx of the underlying node is now exported through HelpCtx.Provider interface. For the API users, HelpCtx.findHelp keeps working the same way.

PropertyPanel.getState, PropertyEnv.add/removePropertyChanageListener

May 27 '02; API spec. version: 2.20; affected top-level classes: PropertyPanel PropertyEnv; issues: #23369
Define interface that would allow to tell customizer that it should check user changed values and that it should commit values. PropertyPanel controls/obtains the value of the PropertyEnv.getState of the current property editor. Thus adding method PropertyPanel.getState () and firing property changes appropriatelly. Added public methods PropertyPanel.getState(), PropertyEnv.addPropertyChangeListener(PropertyChangeListener) and PropertyEnv.removePropertyChangeListener(PropertyChangeListener). Added public static field PropertyPanel.PROP_STATE.

Add set/getSelectionMode in TreeView

Apr 24 '02; API spec. version: 2.15; affected top-level classes: TreeView
Added public methods TreeView.setSelectionMode(int) and TreeView.getSelectioMode().

Add generic help support to property editors

Mar 6 '02; API spec. version: 2.7; affected top-level classes: ExPropertyEditor; made by: akemr; issues: #19294
New property PROPERTY_HELP_ID added to improve generic help support to property editors.

Constructor DefaultPropertyModel (bean, propertyDescriptor) added

Feb 20 '02; API spec. version: 2.4; affected top-level classes: DefaultPropertyModel; made by: jtulach; issues: #20601

New constructor to make DefaultPropertyModel more easily usable with PropertyDescriptor created by hand and not obtained from BeanInfo.

Property editor for DataObject accepts hint rootNode

Oct 19 '01; API spec. version: 1.41
The property editor for org.openide.loaders.DataObject may now be given the property hint rootNode specifying a root node of displyed nodes hierarchy. If omited filesystems repository root node is used instead.

Property editor for File accepts hint baseDir

Sep 25 '01
The property editor for java.io.File may now be given the property hint baseDir specifying a directory from which relative filenames edited by the editor may be resolved.

New property changesImmediate in PropertyPanel

Aug 22 '01; affected top-level classes: PropertyPanel
The added property allows to control whether the changes fired from property editor are immediately propagated to the value of the property (more precisely to the property model).
Compatibility: Added two public methods to class PropertyPanel: public boolean isChangeImmediate(); and public void setChangeImmediate(boolean b);

PropertyEnv can control validation state

Jul 9 '01; affected top-level classes: PropertyEnv
New constants and methods added to the class PropertyEnv:
public static final String PROP_STATE;
public static final Object STATE_VALID;
public static final Object STATE_NEEDS_VALIDATION;
public static final Object STATE_INVALID;
public void setState (Object state);
public Object getState ();
public void addVetoableChangeListener(VetoableChangeListener l);
public void removeVetoableChangeListener(VetoableChangeListener l);

The added methods allow to modify the state of the "environment" from a property editor. They also allow listening on such changes and veto the change if needed. The changes were described here and also the API documentation for the class PropertyEnv should provide information on what they do.

Table explorer views added

May 7 '01; API spec. version: 1.7; affected top-level classes: NodeTableModel TreeTableView ListTableView
New explorer views permit viewing of a list of tree of nodes with properties displayed in tabular form.

Set explored context while selecting nodes (and throw an exception)

Feb 20 '01; affected top-level classes: ExplorerManager
New method public final void setExploredContextAndSelection(Node value, Node[] selection) throws PropertyVetoException added to the class ExplorerManager. It is replacement for the setExploredContext method which should throw the exception.

SetDefaultValueAction removed

Nov 30 '00; affected top-level classes: SetDefaultValueAction; made by: jglick
Made inaccessible. No reason for it to have been public.
Binary-compatible

BeanTreeView.selectionChanged made protected, not public

Nov 6 '00; affected top-level classes: BeanTreeView
Method selectionChanged made protected, not public, to match the access mode of the method it was implementing in TreeView. Code calling it as public is erroneous.
Binary-compatible

Moved validity check into ExPropertyEditor

Oct 30 '00; affected top-level classes: PropertyEnv ExPropertyEditor
Minor change to the new class PropertyEnv: removed methods set/isValid from PropertyEnv and introduced new constant PROP_VALUE_VALID in the ExPropertyEditor.
Compatibility: Deletion from newly added PropertyEnv only.

ExPropertyEditor added and used

Oct 25 '00; affected top-level classes: ExPropertyEditor DefaultPropertyModel PropertyEnv ExPropertyModel
New interface ExPropertyEditor added to the package org.openide.explorer.propertysheet. It extends PropertyEditor allowing to pass information to the property editor by passing an instance of PropertyEnv class - this class was also added. To be able to pass the required information the PropertyModel interface was also extended to ExPropertyModel. DefaultPropertyModel was modified to implement the new interface ExPropertyModel (instead of PropertyModel).

Set explored context while selecting nodes

Sep 13 '00; affected top-level classes: ExplorerManager
New method setExploredContext added with a second parameter giving nodes which are to be selected.

MenuView.Acceptor deprecated and not used

Sep 5 '00; affected top-level classes: MenuView
Interface MenuView.Acceptor is now deprecated. It is recommended to use nodes.NodeAcceptor over MenuView.Acceptor, which will be probably removed entirely in future. The protected field action in both MenuView.Menu and MenuView.MenuItem has changed type to be NodeAcceptor.
Compatibility: Subclasses accessing the action field will be broken.

PropertyDialogManager removed

May 31 '00; affected top-level classes: PropertyDialogManager
Made inaccessible. No one should have been using this class outside its package to begin with, it was public by accident.
Compatibility: First broken, later restored binary compatibility in trunk and boston. Code referring to this class can generally be easily rewritten to simply embed the supplied component in a dialog and show that dialog.
Binary-compatible

Deserialization of explorer managers and panels may throw SafeException

Mar 9 '00; affected top-level classes: ExplorerPanel ExplorerManager; made by: jglick
readExternal of ExplorerPanel or deserialization of ExplorerManager may throw SafeException to indicate a failure in the loading of the manager's handles, but the stream is OK.

The whole org.openide.explorer.propertysheet.editors package is deprecated

(date unknown); affected packages: org.openide.explorer.propertysheet.editors

The entire org.openide.explorer.propertysheet.editors package is generally deprecated and no longer included in Javadoc.

As of 3.14, this package is again included in the Javadoc, though only only a few interfaces remain, and of these several are in fact deprecated, and the rest will probably be deprecated at some point.


Filesystems API

Method FileObject.isReadOnly was deprecated and replaced with methods canRead, canWrite

Jan 10 '03; API spec. version: 3.31; affected top-level classes: FileObject AbstractFileSystem; made by: rmatous
There was made changes in FileObject class. Added method: public boolean canRead (). Method public boolean isReadOnly () was deprecated and replaced with method: public boolean canWrite (). This change can be considered as compatible. Newly added methods have default implementation. Also AbstractFileSystem was modified and two necessary method were added: method: public boolean canRead () and method: public boolean canWrite ().

URLMapper.findFileObjects returns empty array if not successful.

Jan 8 '03; API spec. version: 3.28; affected top-level classes: URLMapper; made by: rmatous; issues: #28312
URLMapper.findFileObjects returns empty array if not successful. As far there was in documentation written, that null is returned.

Added FileUtil.isParentOf

Oct 22 '02; API spec. version: 3.16; affected top-level classes: FileUtil; made by: vstejskal
FileUtil.isParentOf provides simple recursive check whether the FileObject is underneath some folder.

Changed javadoc to warn about improper use of methods

Oct 1 '02; affected top-level classes: FileObject; made by: pzavadsky; issues: #27640 #27687
Changed Javadoc to warn about improper usage of the FileObject.toString (it was used as full path format), which is replaced by FileObject.getPath now. Explained correct purpose of that method. Also added those warnings to findResource and findAllResource of Repository class.

FileObject.getPath() returns full resource path of file object

Aug 30 '02; API spec. version: 3.7; affected top-level classes: FileObject; made by: jglick; issues: #26904
It is commonly necessary to find the full resource path of a file object within its filesystem. Formerly you could do this the safe way by calling getPackageNameExt('/', '.'), but this is clumsy to write, potentially inefficient, and is prone to misinterpretation in the case of files without any extension (or files ending in a period, or folders with extensions). Calling toString() was more effective, but this suffered from the problem that for compatibility reasons, no assurance could be made that it would actually give a resource path - an old FileObject implementation could implement it in any way, since it was not originally documented what it should return. Therefore, the new method getPath() has been introduced.
Compatibility: Existing FileObject implementations ought to override the new method for efficiency. They should also cease to override toString. Subclasses of AbstractFileSystem (the normal case) need not be concerned, since the corresponding FileObject already implements this method correctly. Code assuming toString returns a resource path should be changed to use getPath instead.
Binary-compatible

Repository is not final

Jul 22 '02; API spec. version: 3.3; affected top-level classes: Repository; made by: jtulach
Repository is not final anymore, so there can be subclasses of it. But all its methods has been made final. This was done in order to create Repositories that will follow the javabeans pattern (have public default constructor).

URL -> FileObject mapping implementation

Jun 6 '02; API spec. version: 2.22; affected top-level classes: URLMapper; made by: rmatous
Two methods were added public static FileObject[] findFileObjects (URL url) and public abstract FileObject[] getFileObjects (URL url).
Compatibility: Added abstract method public abstract FileObject[] getFileObjects (URL url) But there doesn`t exists any known subclass of URLMapper yet. And URLMapper was introduced recently 2.16 in 3.4 release.

Added support for better FileObject-URL mapping

Apr 25 '02; API spec. version: 2.16; affected top-level classes: URLMapper; made by: rmatous
Added new class URLMapper. This class provides basic mapping for FileObjects from LocalFileSystem, JarFileSystem and MultiFileSystem and is intended as superclass for individual mappers.

There exists possibility to refresh whole filesystem in one

Apr 24 '02; API spec. version: 2.16; affected top-level classes: FileSystem; made by: rmatous
Method: public void FileSystem.refresh (boolean expected)) was added.

FileSystem provides FileChangeListener functionality

Mar 11 '02; API spec. version: 2.8; affected top-level classes: FileSystem; made by: rmatous
Method: public final void addFileChangeListener(FileChangeListener fcl) and public final void removeFileChangeListener(FileChangeListener fcl) was added to maintain FileChangeListeners that should be notified if some change in FileSystem occures.

Repository provides FileChangeListener functionality

Mar 11 '02; API spec. version: 2.8; affected top-level classes: Repository; made by: rmatous
Method: public final void addFileChangeListener(FileChangeListener fcl) and public final void removeFileChangeListener(FileChangeListener fcl) was added to maintain FileChangeListeners that should be notified if some change in Repository occures.

New property FileSystem.PROP_DISPLAY_NAME was added

Jan 17 '02; API spec. version: 2.1; affected top-level classes: FileSystem; made by: rmatous
FileSystem.PROP_DISPLAY_NAME added to notify a change in the display name.

FileEvents fired inside atomic actions can report from which atomic actions they were fired

Sep 21 '01; API spec. version: 1.35; affected top-level classes: FileEvent; made by: rmatous
Method boolean FileEvent.firedFrom(FileSystem.AtomicAction run) returns true if this FileEvent was fired from run.

Method createWritableOnForRename in MultiFileSystem was added

Aug 30 '01; API spec. version: 1.34; affected top-level classes: MultiFileSystem; made by: rmatous
Protected method createWritableOnForRename in MultiFileSystem was added. This method has the same meaning as createWritableOn but have two parameters: oldName, newName. This method is called from MultiFileObject.rename.

FileAttributeEvent's methods getName (), getOldValue (), getNewValue () can return null

Aug 24 '01; API spec. version: 1.33; affected top-level classes: FileAttributeEvent; made by: rmatous
FileAttributeEvent's methods getName (), getOldValue (), getNewValue () can return null. If getName () returns null then this means that one of attributes were changed. If getName () returns null then there is supposed that all FileAttributeEvent fields will return null also.
Compatibility: Code previously assuming that all FileAttributeEvent fields were non-null may now be broken, and should check for nulls.

Discover which filesystem a FileStateInvalidException is associated with

Aug 17 '01; API spec. version: 1.30; affected top-level classes: FileStateInvalidException; made by: mschilling
Added method public String getFileSystemName(). This will return the name of the filesystem containing the file with invalid state if such information is available.

Find a disk file from a file object or vice-versa

Jul 31 '01; API spec. version: 1.29; affected top-level classes: FileUtil; made by: rmatous
Added method public File toFile(FileObject). Finds appropriate java.io.File to FileObject if possible. If not possible then null is returned. Also added method public FileObject[] fromFile(File). Finds appropriate FileObjects to java.io.File if possible. If not possible then empty array is returned. More than one FileObject may correspond to one java.io.File so an array is returned.

Mounting new filesystem no longer works with filesystems providing WizardDescriptor as bean customizers

Jul 24 '01; made by: jtulach

It used to be the case (NB 3.2) that a FileSystem implementation could in its BeanInfo specify a BeanDescriptor whose Customizer class extended WizardDescriptor. This would cause the wizard to be opened when the user tried to mount that filesystem type.

The situation now (from 3.3) is that this no longer opens the customizer and property sheet is presented in the second step of the mount wizard.


Compatibility: WizardDescriptor as bean customizer no longer opens the wizard while mounting. To achieve this use of a special iterator in Templates/Mount/ is now used (for modules 3.3+).

Create file object without extension

Jun 27 '01; API spec. version: 1.17; affected top-level classes: FileObject; made by: rmatous
Added convenience method public FileObject createData(String name) throws IOException. Creates new data file in this folder with the specified name. Plainly calls createData(name,"").

Simplified file object deletion

Jun 25 '01; API spec. version: 1.15; affected top-level classes: FileObject
Added method public final void delete(). FileObject is locked before delete and finally this lock is released.

Can mark files as being virtual

Jun 1 '01; affected top-level classes: AbstractFileSystem
Added new protected method protected boolean checkVirtual(String name).Tests if file really exists or is missing. Some operation on it may be restricted if returns true.

Can mark files as being important

Jun 1 '01; affected top-level classes: AbstractFileSystem
Added new protected method protected void markImportant(String name, boolean important). Mark the file as being important or unimportant.

Test if a file object is virtual

Jun 1 '01; affected top-level classes: FileObject
Added new method public isVirtual. Tests if file really exists or is missing. Some operation on it may be restricted. Return value true indicates that the file is missing.

Get default Repository from within Filesystems API

Feb 7 '01; affected top-level classes: Repository
Added method Repository.getDefault() that allows standalone tools (using just filesystems library) without access to TopManager to get the default repository of the system.

Find a MIME type for a file object using resolvers

Feb 5 '01; affected top-level classes: FileUtil
Added new public method getMIMEType(FileObject). Resolves MIME type. Registered resolvers are invoked and used to achieve this goal. Resolvers must subclass MIMEResolver. If resolvers do not recognize MIME type then MIME type is obtained for a well-known extension.

Added MIMEResolver

Feb 5 '01; affected top-level classes: MIMEResolver; made by: rmatous
Added new MIMEResolver. This class is intended as superclass for individual resolvers.

Create expected file events

Jan 29 '01; affected top-level classes: FileEvent FileAttributeEvent FileRenameEvent
FileEvent and subclass constructors may take a parameter boolean expected.

Repository is not a cookie

Jan 8 '01; affected top-level classes: Repository; made by: jtulach
Repository has been changed not to implement the Node.Cookie interface. The reason for such change is that this was the only place where filesystems package depended on another part in the IDE.
Compatibility: Code that used Repository as cookie should be changed to:
ic = (InstanceCookie)node.getCookie(InstanceCookie.class);
if (ic != null && Repository.class.isAssignableFrom(ic.instanceCookie())) {
    // do stuff
}

Binary-compatible

MultiFileSystem finds actions on a set of files specially

Dec 6 '00; affected top-level classes: MultiFileSystem
Method: getActions(final Set foSet) was added, which should provide a Set of FileObjects to run the actions on. This method overloads default behavior of FileSystem.getActions(final Set foSet).

Propagate masks flag for multi-filesystems

Nov 23 '00; affected top-level classes: MultiFileSystem; made by: jglick
setPropagateMasks and getPropagateMasks added to make it easier to compose multi filesystems inside other multi filesystems.

Added XMLFileSystem

Nov 1 '00; affected top-level classes: XMLFileSystem
Added new XMLFileSystem that reads content of special XML file and represents it as filesystem. This filesystem is used by modules to provide their own content of menus, toolbars, templates, component palette, etc.

MIME lookup by extension made friendlier for C/C++

Sep 11 '00; affected top-level classes: FileUtil; made by: jglick
MIME types no longer include C/C++ extensions by default; and file extension lookups give preference to case-sensitive matches but also work with case-insensitive matches by default.

Customizable references to known file objects

Aug 22 '00; affected top-level classes: AbstractFileSystem
Added new protected method Reference createReference(FileObject fo). This method returns WeakReference of obj (new WeakReference (fo)). If you subclass from AbstractFileSystem, you can overload this method to return another type of Reference.

Find references to file objects by name

Aug 22 '00; affected top-level classes: AbstractFileSystem
Added new final protected method Reference findReference(String resourceName). This method finds the reference associated with resourceName.

Find known file objects starting from some point in the tree

Aug 10 '00; affected top-level classes: AbstractFileSystem
Added new protected method existingFileObjects(FileObject). Can be used to find all FileObjects in this filesystem with the given predecessor.

RepositoryAdapter added

Jun 25 '00; affected top-level classes: RepositoryAdapter; made by: jglick
Added to make it easier to use RepositoryListener.

Filesystem implementation methods protected not public

Mar 27 '00; affected top-level classes: LocalFileSystem JarFileSystem; made by: jtulach

Many methods in LocalFileSystem and JarFileSystem were declared public though they should never have been called directly. (They were implementing interface methods that would only be called from within the class itself.) These methods are:

Also in JarFileSystem only:

All these methods are now protected.

In general, outside code should use the proper outer API to access filesystems (FileSystem and FileObject and some helper classes), only directly calling methods of implementation classes where this is required (constructors or setRootDirectory). As a matter of style, it is recommended that calling code declare variables to be of the abstract type (e.g. FileSystem) to clarify that only generally available methods will be called.


Compatibility: First broken, later restored binary compatibility in trunk and boston. Any outside code calling them as public will break; however such code is definitely erroneous and should be rewritten.
Binary-compatible

AbstractFileSystem.refreshRoot was of the wrong type

Feb 24 '00; affected top-level classes: AbstractFileSystem
refreshRoot now returns FileObject rather than the subclass AbstractFileObject. In fact the returned object currently is always an AbstractFileObject but this subclass is package-private so it was an API bug to mention it from an accessible method.
Compatibility: First broken, later restored binary compatibility in trunk and boston. The change should be source-code compatible, and is made to be binary compatible as well.

Cross-API

J2SE 1.4 required

May 14 '03; API spec. version: 4.6; made by: jglick
NetBeans now requires a Java 2 VM (JDK, JRE) of version 1.4 or later. 1.3 is no longer supported.

Places.Nodes.packages deprecated and no more supported

Oct 1 '02; API spec. version: 3.10; affected top-level classes: Places; made by: pzavadsky; issues: #27655
Places.Nodes.packages is not working any more. The default implementation returns empty node now. Original purpose of this method was java-centric, what will be not supported. Thus the old implementation wouldn't be working anyway. (The old packages node impl was moved to objectbrowser module, where it needs to deal with upcoming changes.)

Java Hierarchy API (historical)

Get JVM name and signature for a class

Nov 15 '00; affected top-level classes: ClassElement Type
Two methods on ClassElement, getVMName and getSignature added. getVMName() returns name for a class that can be passed to java.lang.Class.forName(). getSignature() returns signature for the class according to the VM specs. Correspondingly Type got getVMClassName and getSignature.

Modules API

Modules can declare their own dependency transformations

Jan 27 '03; API spec. version: 3.33; made by: jglick; issues: #30161

Modules may now declare their own transformations of module dependencies using a declarative XML syntax in the folder ModuleAutoDeps/ in the system filesystem. This is useful for being able to manage major refactorings of functionality in a manner that will retain binary compatibility.

Added InstalledFileLocator

Nov 13 '02; API spec. version: 3.21; affected top-level classes: InstalledFileLocator; made by: jglick; issues: #28683
This new service permits modules to find disk files associated with their installation. For example, files packed into an NBM alongside the module could be found in this way. Using the locator is both safer and more convenient than checking undocumented system properties or resorting to other tricks. Note that the NBM format is still not specified by the Open APIs; however, if there is a packaging format in use, then there should be a matching locator implementation that locates files bundled by it.
Compatibility: Existing module code which searches system properties such as netbeans.home and netbeans.user should be replaced with calls to the new supported API.

Possible to deprecate an entire module

Oct 16 '02; API spec. version: 3.15; made by: jglick
The new manifest attribute OpenIDE-Module-Deprecated and localized attribute OpenIDE-Module-Deprecation-Message may be used to warn clients of an obsolete API module.

Module dependencies no longer considered transitive for purposes of classloading

Oct 7 '02; API spec. version: 3.12; made by: jglick; issues: #27853
Prior to this change, if module B depends on module A, where A provides some public packages (implicitly or explicitly), and module C depends on module B, then module C could use public packages from A. Now it cannot, unless it also declares an explicit dependency on A.
Compatibility: Modules which fail to declare an API dependency on IDE/1 > 3.12 or above will behave according to the old semantics: they may load classes and resources from undeclared indirect parent modules. But if they declare an API dependency on 3.12 or higher, the new semantics apply.

Modules can declare their public packages

May 16 '02; API spec. version: 2.19; made by: jglick; issues: #19621

Modules which provide Java-level APIs to other modules can now specify which packages should be considered part of the public API. Other packages are blocked from client modules.

Utilizing this feature for already released modules is very dangerous. See issue #31637 for details.

Thread.contextClassLoader defaults to TopManager.systemClassLoader

May 8 '02; made by: jglick; issues: #20663
The context class loader for all threads now defaults to the system class loader, capable of loading from modules and their extensions as well as the startup classpath. This is especially useful for modules bundling NetBeans-independent libraries such as JAXP which use the context class loader as a default whenever no particular class loader is specified to some registration mechanism.

Provides-requires semantics for module dependencies

Jan 29 '02; API spec. version: 2.3; affected top-level classes: Dependency ModuleInfo; made by: jglick; issues: #18781
The manifest attributes OpenIDE-Module-Provides and OpenIDE-Module-Requires were introduced. These permit modules to depend on capabilities offered by other modules, without explicitly naming who the provider will be.

Ranged major release version dependencies

Jan 29 '02; API spec. version: 2.3; affected top-level classes: Dependency; made by: jglick; issues: #19714
Module dependencies may now specify a range of major release versions, to indicate that the dependency is valid for all mentioned major releases. Though the API-providing module may have had some incompatible changes, none of them were found to be relevant to the depending module.

JavaHelp split into a separate module

Jan 22 '02; API spec. version: 2.2; made by: jglick; issues: #19620 #27776

JavaHelp support is now in a separate module, org.netbeans.modules.javahelp/1. This module includes the javax.help.** packages, and it provides the token org.netbeans.api.javahelp.Help which signifies the ability to display help, for example using TopManager.showHelp, or by querying Lookup for an instance of Help.

New modules (declaring a dependency on APIs after 2.2) which wish to provide a helpset should continue to do so via XML layer, and need only require the token org.netbeans.api.javahelp.Help. New modules wishing to display help can either require this token and use TopManager.showHelp, or depend on the org.netbeans.modules.javahelp/1 API module, require the token, query Lookup for an instance of Help, and use its methods directly. New modules wishing to use the javax.help.** packages directly should declare a dependency on the org.netbeans.modules.javahelp/1 module rather than using a package dependency.


Compatibility:

Existing modules (with an API dependency earlier than 2.2, or none at all) for compatibility are given an automatic dependency on the org.netbeans.api.javahelp.Help token. Additionally, if they declared a package dependency on javax.help.**, they are given an automatic dependency on the org.netbeans.modules.javahelp/1 module.

(Note: the automatic conversion of the package dependency is implemented by issue #27776, which was not fixed for the NetBeans 3.4 release, but will be for NetBeans 3.4.1. NetBeans 3.4 did, however, add automatic dependencies on the token, by far the more common case.)

Both layer- and manifest-based installation of help sets continue to be supported; manifest-based installation is still deprecated.

Format of modules XML folder defined

Aug 17 '01; API spec. version: 1.31; made by: jglick; issues: #13921
Some aspects of the contents of the system Modules/ folder and its XML files are now defined. Additionally, certain kinds of changes (module enablement or disablement) are now permitted to these XML files.

Can determine which module owns a given class

Jul 31 '01; API spec. version: 1.28; affected top-level classes: ModuleInfo; made by: jpokorsky
Added owns(Class) to determine if the provided class was loaded as a part of the module.

Can supply localized messages for failed dependencies

Jul 20 '01; API spec. version: 1.26; affected top-level classes: ModuleInfo; made by: jglick
Permitting main attributes OpenIDE-Module-Module-Dependency-Message and OpenIDE-Module-Package-Dependency-Message.

New module installer API

Jul 16 '01; API spec. version: 1.24; affected top-level classes: ModuleInfo Dependency SpecificationVersion ModuleDescription ManifestSection IllegalModuleException ModuleInstall; made by: jglick
New module installer and corresponding API enhancements. ModuleDescription, ManifestSection, and IllegalModuleException deprecated. ModuleInfo, Dependency, SpecificationVersion, and ModuleInstall.validate added. Module information available from lookup. Localized properties may be stored in bundles.

JavaHelp may be registered via layer

Apr 29 '01; API spec. version: 1.6; made by: jglick
Added ability to specify JavaHelp help sets and links from layer, or generally XML file.

Can get the class implementing a manifest section

Mar 8 '01; affected top-level classes: ManifestSection
Added method getSectionClass().

Added long description for modules

Feb 9 '01; affected top-level classes: ModuleDescription; made by: jglick
Added getLongDescription and TAG_LONG_DESCRIPTION.

Can get JavaHelp help set reference as resource rather than URL

Jan 22 '01; affected top-level classes: ModuleDescription; made by: jglick
Added getDescriptionResource. Retrieving as URL deprecated.

Display category for modules

Jan 18 '01; affected top-level classes: ModuleDescription; made by: jglick
Added getDisplayCategory and TAG_CATEGORY.

Short description for modules

Dec 21 '00; affected top-level classes: ModuleDescription; made by: jglick
Added getShortDescription and TAG_SHORT_DESCRIPTION.

Get layer as a resource, not URL

Nov 23 '00; affected top-level classes: ModuleDescription; made by: jglick
getLayerResource() added. Thus all locale variants of a layer may be merged together. Retrieval as URL is deprecated.

Permit abbreviated sample class names in package dependencies

Nov 22 '00; made by: jglick
Slight extension to package dependency syntax to allow abbreviated sample name.

Package-accessible classloader

Nov 12 '00; affected top-level classes: ModuleDescription; made by: jglick
Inner interface PackageAccessibleClassLoader added to make it easier to check package dependencies. Package dependencies which include sample classes are now permitted.

Support layer specification in a module manifest

Nov 2 '00; affected top-level classes: ModuleDescription; made by: jglick
Now also understands OpenIDE-Module-Layer tag that can specify a resource path to XMLFileSystem that is provided by the module. Also added method getLayer() that returns the URL of XML filesystem if provided.

Manipulation of classloader used by a module

Aug 27 '00; affected top-level classes: ModuleDescription; made by: jglick
Added methods getClassLoader, setClassLoader and getBadClasses.

ModuleDescription constructor may specify a classloader

Mar 28 '00; affected top-level classes: ModuleDescription; made by: jglick
Constructors may now specify a classloader to use rather than setting it later.

Nodes API

InplaceEditor interface added to APIs, some deprecations in property sheet rewrite

Jul 16 '03; API spec. version: 4.9; affected top-level classes: PropertySet InplaceEditor PropertyEnv PropertySheet PropertySheetSettings; made by: tboudreau; issues: #29447
New interface that allows a property editor to supply an inline editor for the new property sheet added, as part of merging the new property sheet. A method, registerInplaceEditorFactory() has been added to PropertyEnv to allow modules to supply an inplace editor globally for all properties of a given type; also, Node.Property objects may supply a custom inplace editor instance via the hint "inplaceEditor" in getValue(String).

PropertySheetSettings is an old SystemOption subclass that offers settings that affect the display of the property sheet. These settings are irrelevant to the new property sheet.

In order to provide some performance optimizations, it was necessary to un-final the class PropertyEnv. However, it should be treated as final outside the package - there should never be a need to subclass it. A note has been added to its javadoc to this effect.

A non-normative hint may now be supplied by instances of Node.PropertySet to return a localized display name for a tab which the property sheet should use for displaying that and any other property sets which share the name: "tabName".

New FilterNode constructor that takes Lookup

Apr 7 '03; API spec. version: 4.4; affected top-level classes: FilterNode; made by: jtulach; issues: #32470
Allows users of FilterNode to provide own specific lookup.

Returning value of NodeOp.findActions method refined

Feb 26 '03; affected top-level classes: NodeOp; made by: pzavadsky; issues: #31476
The utility method NodeOp.findActions(Nodep[]) is changed the way it returns an empty array instead of null (for the cases there are no actions found). Also javadoc is refined in that sense.
Compatibility: In fact this is just a slight refinement of the API intoduced by 3.29 change.

Added method Node.Property.isDefaultValue

Nov 8 '02; API spec. version: 3.19; affected top-level classes: Node; made by: dstrupl
Method public boolean isDefaultValue() has been added to class Node.Property. The idea behind this is to visually mark modified properties in the property sheet. If the method returns false it means that the value has been modified by the user and visual feedback will be shown. The reason why the default impl is returning true is to make the old properties (properties using previous version of the API) look the same as they did before the change.

Node implements Lookup.Provider

Oct 3 '02; API spec. version: 3.11; affected top-level classes: Node; made by: jtulach; issues: #26790
Node has been extended to provide method getLookup that allows better querying possibilities than the old Node.getCookie method. New constructors have been provided to allow to pass a Lookup instance to newly created node. In such case Node.getCookie delegates to the provided instance, otherwise Node.getLookup delegates to Node.getCookie content.

New method setChildren() in Node

Jul 15 '02; API spec. version: 3.1; affected top-level classes: Node; made by: phrebejk
Node has new method setChildren(Children) which allows to change the Children of given Node. Node also fires new PropertyChangeEvent(PROP_LEAF) whenever changing children from non-LEAF to LEAF and vice-versa.

Added Children.getNodes(boolean optimalResult)

May 2 '02; API spec. version: 2.17; affected top-level classes: Children; made by: pnejedly
Added an additional getNodes() method when the API user can specify whether he need the most right result. The method is needed for code-based navigation through nodes, like scripting, and for testability. SPI implementors can implement it better.

Nodes can be declared through layers, manifest declaration deprecated

Apr 24 '02; API spec. version: 2.16; made by: dsimonek; issues: #19609
Added possibility to define Environment, Runtime and Root nodes through layer instead of manifest declaration. Manifest declaration is now deprecated.

It is impossible to remove CookieSet.Factory from CookieSet

Feb 28 '02; API spec. version: 2.6; affected top-level classes: CookieSet; made by: dstrupl; issues: #15373
The API for CookieSet was not symmetrical. You could add factories but there was no way to remove them.

Method changing original Node added into FilterNode and FilterNode.Children

Oct 16 '01; API spec. version: 1.39; affected top-level classes: FilterNode; made by: phrebejk; issues: #12048
Method protected final void changeOriginal( Node original, boolean ) and protected final void changeOriginal( Node original added to the class FilterNode and FilterNode.Children. The methods allow to change the Node resp. Children the FilterNode resp. FilterNode.Children delegates to. For more detailed information please see the Javadoc of the methods.

Added Index.Support.showIndexedCustomizer

Oct 11 '01; API spec. version: 1.37; affected top-level classes: Index IndexedCustomizer; made by: jglick; issues: #9323
The static method Index.Support.showIndexedCustomizer(Index) was added to provide a simpler way of displaying a dialog to reorder a set of nodes based on an index cookie. Unlike direct use of the IndexedCustomizer dialog, it interacts smoothly with the IDE's window system.
Compatibility: Code using IndexedCustomizer directly (as a dialog) should consider using the new method instead.

Method for checking PropertyChangeListeners on Node added

Oct 8 '01; API spec. version: 1.36; affected top-level classes: Node; made by: phrebejk; issues: #15495
Method protected final boolean hasPropertyChangeListeners() added to the class Node. Method returns true if at least one PropertyChangeListener is attached to the Node. At the same time changes were made to optimize the number of attached listeners so calling this method should have some information value.

AbstractNode.cookieSet protected, not public

May 19 '01; affected top-level classes: AbstractNode; made by: jglick
getCookieSet now protected, not public. Logically it should never have been public, since each object is responsible for providing its own set of cookies as it sees fit, and making it possible for anyone to retrieve and modify its cookie set without its explicit permission violates this modularity. Also setCookieSet deprecated.
Compatibility: Subclasses of the node should have the responsibility of adding or removing cookies. See further notes under MultiDataObject.
Binary-compatible

Children.Keys.createNodes can be null

Mar 15 '01; affected top-level classes: Children; made by: jtulach
createNodes(Object key) can now return null if the key should have no nodes to represent it. The purpose is to reduce the number of useless created objects.

Index.KeyChildren.createIndex protected

Mar 13 '01; affected top-level classes: Index
Method createIndex made protected.

May provide special lock for index implementations

Mar 6 '01; affected top-level classes: Index
Added method protected Index.KeyChildren.lock() which returns an object that is used as a synchronization lock when working the the list object provided in constructor.

Properties and property sets may have help

Jan 30 '01; affected top-level classes: Node; made by: jglick
Node.PropertySet and Node.Property may now have the FeatureDescriptor property helpID set on them (to a String) help ID) which may be used in the property sheet.

Creation of popup menus handle duplicate actions

Aug 9 '00; affected top-level classes: NodeOp
Changed method findContextMenuImpl. In case of constructing menu from node which for some reason has more than one occurrence of the same SystemAction no menu item was created. Now one menu item will be created for such an action, where the first occurrence is taken into account.

BeanChildren changed superclass

Jun 23 '00; affected top-level classes: BeanChildren
Changed superclass from Children.Map to Children.Keys.
Compatibility: Any subclasses which used the following methods will be broken: There were no known subclasses of BeanChildren (it is rarely used at all).

Added Index.KeyChildren

May 2 '00; affected top-level classes: Index
New class that should simplify displaying and reordering of nodes representing java.util.List. Automatically provide implementation of Index to reorder content of the list.

NodeOp.setDefaultActions removed

May 2 '00; affected top-level classes: NodeOp
setDefaultActions deprecated.
Compatibility: First removed, later re-added but deprecated in trunk and boston. Only technically incompatible: could always only be called once, otherwise a SecurityException would be thrown.

Default node handle stores only direct parent

Mar 9 '00; affected top-level classes: DefaultHandle; made by: jglick
DefaultHandle rewritten. Now stores just handle of direct parent, so that intervening nodes have the opportunity to supply their own handles.
Compatibility: It never actually worked before anyway; no module could have successfully used the previous behavior and be broken by the change.

Options API

Directly adding or removing options is deprecated

Apr 25 '01; affected top-level classes: ControlPanel
Methods ControlPanel.add(SystemOption) and ControlPanel.remove(SystemOption) are deprecated now.
Compatibility: Their functionality can be obtained by using a declaration in a manifest file.

ContextSystemOption.beanContext changed type

Feb 25 '00; affected top-level classes: ContextSystemOption
Protected field beanContext has changed type. The previous type was an inaccessible class, which was an API bug; it is now the public superclass.
Compatibility: Should be source-compatible. Binary-incompatible for subclasses of ContextSystemOption directly accessing this field; but use of this field is probably unnecessary as addOption and removeOption are the normal public methods to manipulate the children. As of May 22 '01 the field is deprecated.

Services & Lookup API

New lookupItem() method in Lookups

Jul 9 '03; API spec. version: 4.8; affected top-level classes: Lookups; made by: vstejskal
New method that returns Lookup.Item implementation for given instance and key identifying that instance in the lookup. This method is useful when writing Looks which need to return some cookies (Collection of Lookup.Items).

New method Lookups.metaInfServices

Feb 5 '03; API spec. version: 3.35; affected top-level classes: Lookups; made by: dstrupl; issues: #29126
A lookup that implements the JDK1.3 JAR services mechanism and delegates to META-INF/services/name.of.class files. This lookup was (is) used by core and the core had to use reflection to create an instance. Moreover can be usefull for module authors and in standalone library.

Folder lookup may be serialized

Jan 7 '03; API spec. version: 3.27; affected top-level classes: FolderLookup AbstractLookup ProxyLookup; made by: jglick; issues: #20190
To implement lookup caching, some lookup implementations are now serializable: AbstractLookup as well as FolderLookup's lookup. ProxyLookup has a protected subclass constructor permitting subclasses to be serializable.
Compatibility: Modules which rely on a data object under Services/ gaining or losing InstanceCookie between sessions may not work correctly with the cache. This is probably very rare.

ErrorManager.isNotifiable added

Nov 3 '02; API spec. version: 3.18; affected top-level classes: ErrorManager; made by: jglick; issues: #24056
The method ErrorManager.isNotifiable was added to capture the fact that an error manager implementation might be more aggressive about displaying stack traces than log messages.
Compatibility: Existing code which assumes (incorrectly) that isLoggable can be used for this purpose, or which calls notify at a low level such as INFORMATIONAL without first checking isNotifiable for efficiency, should be revised.

New method Lookups.proxy

Sep 20 '02; API spec. version: 3.9; affected top-level classes: Lookups; made by: dstrupl; issues: #27425
Creates a lookup that delegates to another one but that one can change from time to time. The returned lookup checks every time somebody calls lookup or lookupItem method whether the provider still returns the same lookup. If not, it updates state of all Lookup.Results that it created (and that still exists).

Modules can specify the content of Lookup.getDefault in META-INF/services

Jul 22 '02; API spec. version: 3.3; made by: jtulach
The content of Lookup.getDefault() can be specified by a standard JDK registration mechanism, using JARs' META-INF/services directory. This is suitable for services that do not change, do not require user modification and that need to be ready soon during initialization of the system. For other usecases it is still better to continue to use module layer registration.

TopManager's getters deprecated

Jul 22 '02; API spec. version: 3.3; affected top-level classes: TopManager; made by: jtulach
Getters in TopManager (methods that take no arguments and return a value like getPlaces, getLoaderPool, etc.) have been deprecated in favor of using Lookup. So instead of calling TopManager.getDefault().getLoaderPool() the suggested way is to Lookup.getDefault().lookup (DataLoaderPool.class).

Added org.openide.util.lookup.Lookups

May 28 '02; API spec. version: 2.21; affected top-level classes: Lookups; made by: dstrupl; issues: #20550
New utility class added. The class cannot be instantiated and contains following static methods:

public static Lookup singleton(Object objectToLookup);
public static Lookup fixed(Object[] objectsToLookup);
public static Lookup fixed(Object[] keys, InstanceContent.Convertor convertor);
The methods return an instance of simple lookup implementation that holds the objects passed a parameter.

Enhanced usage of ProxyLookup & AbstractLookup.Content

Aug 18 '01; API spec. version: 1.31; affected top-level classes: AbstractLookup ProxyLookup; made by: jtulach
AbstractLookup.Content made public to allow its usage for objects that do not subclass AbstractLookup. ProxyLookup.beforeLookup added so subclasses can update themselves (call setLookups (...)) before the actual lookup is performed.

Changes in access protection of proxy lookup

Jul 8 '01; API spec. version: 1.19; affected top-level classes: ProxyLookup
ProxyLookup.setLookups made protected instead of public so nobody can misuse the method except the creator of the object and ProxyLookup.getLookups added. ProxyLookup made non final.
Compatibility: Changes to newly added feature.

Lookup service providers package created

Jun 1 '01; API spec. version: 1.9; affected top-level classes: AbstractLookup ProxyLookup; affected packages: org.openide.util.lookup; made by: jtulach
Package org.openide.util.lookup created, should hold SPI interfaces for lookup. Initially filled with AbstractLookup which introduces AbstractLookup.Pair and with ProxyLookup.

Added lookup items and support APIs

May 25 '01; API spec. version: 1.8; affected top-level classes: Lookup; made by: jtulach
Lookup enhanced. Interface Lookup.Item and additional methods to access it also added.

Lookup system introduced

Mar 1 '01; affected top-level classes: Lookup LookupEvent LookupListener; made by: jtulach
Better version of Lookup introduced. There is a org.openide.util.Lookup with bunch of inner classes and org.openide.util.LookupListener and org.openide.util.LookupEvent.

ServiceType.createClone added

Nov 30 '00; affected top-level classes: ServiceType
public final ServiceType createClone() added.
Compatibility: Subclasses are encouraged to implement Cloneable.

"Welcome" folder available

Jul 19 '00; affected top-level classes: Places
welcome() added to Places.Folders.

Cannot set default TopManager

Mar 16 '00; affected top-level classes: TopManager
TopManager.setDefault deprecated.
Compatibility: Mar 16 '00 removed, later re-added but deprecated in trunk and boston. An incompatible change only in the technical sense: it was called by the core implementation at startup, and any further attempts to call it would also result in a SecurityException anyway.

Instance content simplifies creation of lookups

(date unknown); API spec. version: 1.25; affected top-level classes: AbstractLookup InstanceContent; made by: jtulach
Added AbstractLookup.Content which can be passed to an abstract lookup in its constructor and used to control the contents easily. Also InstanceLookup provides the common easy implementation.

Utilities API

Support for complicated listeners

Sep 2 '03; API spec. version: 4.12; affected top-level classes: WeakListeners; made by: jtulach; issues: #35726
Improved support for hierarchic listeners (aka NamingListener vs. ObjectChangeListener from javax.naming.event package).

Global action context as Lookup

Aug 12 '03; API spec. version: 4.10; affected top-level classes: ContextGlobalProvider Utilities; made by: jtulach; issues: #34758
As part of the work on separation of openide.jar into smaller parts a new interface ContextGlobalProvider and new method in utilities Utilities.actionsGlobalContext() had to be added in order to separate the implementation of actions like CallbackSystemAction and NodeAction from their dependency on window system.

Old WeakListener replaced by WeakListeners class

Aug 12 '03; API spec. version: 4.10; affected top-level classes: WeakListener WeakListeners FileUtil NodeOp; made by: jtulach; issues: #34758

As part of the work on separation of openide.jar into smaller parts the WeakListener had to be deprecated as it referenced too many classes around and replaced by more general WeakListeners factory class that provides a generic create method and specialized factory methods just for JDK own interfaces.

Also few factory methods were spread into appropriate packages like FileUtil.weakFileChangeListener and NodeOp.weakNodeListener.

Removal of WeakListener.operation method

Apr 2 '03; API spec. version: 4.3; affected top-level classes: WeakListener; made by: jtulach; issues: #32143
WeakListener.operation method has been removed. Instead of it one can use the generic WeakListener.create or DataLoaderPool.createWeakOperationListener.

New method to find HelpCtx

Apr 2 '03; API spec. version: 4.3; affected top-level classes: HelpCtx; made by: jtulach; issues: #32143
A new method for finding HelpCtx (HelpCtx.findHelp(Object)) has been added to replace the old InstanceSupport.findHelp that has been separated out from the openide.jar.

Retrofit of interface Cancellable into RequestProcessor.Task

Mar 14 '03; API spec. version: 4.1; affected top-level classes: RequestProcessor; made by: dsimonek
RequestProcessor.Task was made to implement util.Cancellable interface. No change of implementation at all, RP.Task already had method from interface implemented, this is just a logical retrofit.

org.openide.awt.Mnemonics added

Feb 10 '03; API spec. version: 3.37; affected top-level classes: Mnemonics Actions; made by: jglick; issues: #26640
The class org.openide.awt.Mnemonics was introduced as a centralized and convenient place to set localized text for a variety of components while properly handling mnemonics in a variety of international scripts.

Support for asynchronous init of UI components

Feb 5 '03; API spec. version: 3.36; affected top-level classes: AsyncGUIJob Cancellable Utilities; made by: dsimonek; issues: #30604

Performance related API addition, allows clients to write asynchronous initialization of UI components easily by providing AsyncGUIJob implementation. Also introduced Cancellable ability. Utilities.attachInitJob couples init job with target UI component.

Improved method for topological sort

Jan 10 '03; API spec. version: 3.30; affected top-level classes: Utilities TopologicalSortException; made by: jglick; issues: #27286
The method Utilities.topologicalSort was added. It should be faster and probably more robust than the older partialSort method, which required a Comparator; the new method requires a list of ordering constraints, which should be O(n + m) rather than O(n2) (where n is the number of nodes to sort and m the number of edges). If the graph is not a DAG a TopologicalSortException is thrown containing description of unsortable parts of the graph and the best partitial sort that fullfils as much of ordering constraints as possible. These information can be used for error reporting and recovery.

Utilities.toFile and toURL added

Dec 24 '02; API spec. version: 3.26; affected top-level classes: Utilities; made by: jglick; issues: #29711
Two new utility methods were added which permit easy interconversion between files and URLs using the file protocol. This task is easy and safe under JDK 1.4, yet JDK 1.3 lacks a single call to do these tasks which will handle unusual characters in file names, especially hash marks. The utility methods use the JDK 1.4 variants when possible, else use specially coded versions of the JDK 1.3 variants which handle hash marks.
Compatibility: Existing code which uses the JDK 1.3 method File.toURL should be examined, as it may be better to call Utilities.toURL. Similarly, code which gets the path from a URL and calls the File constructor may need to be changed to call Utilities.toFile. Such changes should improve robustness of code when used in strangely named directories.

Can load localized cached images

Dec 15 '02; API spec. version: 3.24; affected top-level classes: Utilities SystemAction; made by: jglick; issues: #22156
Added method Utilities.loadImage(String, boolean) which works like Utilities.loadImage(String) except that it will search for localized images. Also SystemAction.getIcon() will load a localized image now if there is one.

org.openide.util.Utilities.createProgressCursor added

Dec 2 '02; API spec. version: 3.23; affected top-level classes: Utilities; made by: dsimonek
Method java.awt.Cursor createProgressCursor(java.awt.Component comp) was added into Utilities class. Method creates mouse cursor suitable for components which are busy, but still reacts to the input events. (don't block UI).

Added interface HelpCtx.Provider

Nov 11 '02; API spec. version: 3.20; affected top-level classes: HelpCtx DialogDescriptor ServiceType DataObject Node SystemOption SystemAction NewType PasteType TopComponent; made by: pnejedly
An interface HelpCtx.Provider with one method getHelpCtx was added and the logic in HelpCtx.findHelp and InstanceSupport.findHelp was extended to take this interface into accout. Various classes with existing getHelpCtx method were retrofitted to implement this interface.

Utilities.activeReferenceQueue()

Oct 7 '02; API spec. version: 3.11; affected top-level classes: Utilities; made by: jtulach; issues: #27238
Active java.util.ref.ReferenceQueue that polls for all enqued instances (that should implement Runnable) and invokes their run method to do actual cleanup.

New interface Lookup.Provider

Aug 19 '02; API spec. version: 3.6; affected top-level classes: Lookup; made by: dstrupl; issues: #26275
An object can have method getLookup if there is a need to provide local loookup instance. To recognize objects with such a facility we are introducing interface Lookup.Provider with only one method: getLookup.

Deprecation of parts of MouseUtils.PopupMenuAdapter

Aug 6 '02; API spec. version: 3.4; made by: dsimonek
Constructor MouseUtils.PopupMenuAdapter(int) and public static field DEFAULT_THESHOLD are now obsoleted, performs no action. PopupMenuAdapter now delegates to isPopupTrigger crossplatform call, should be constructed via default constructor.

Added RequestProcessor.getDefault(), deprecated static methods in RequestProcessor

Apr 15 '02; API spec. version: 2.12; affected top-level classes: RequestProcessor; made by: pnejedly
Sharing of singlethreaded RequestProcessor.DEFAULT through the static methods is inherently deadlock-prone, so the methods are deprecated and their usage should phase out in the favor of using private RequestProcessors or the shared multithreaded instance available through the new static method RequestProcessor.getDefault().

Use Lookup to register HttpServer.Impl's

Apr 12 '02; API spec. version: 2.11; affected top-level classes: HttpServer; made by: rkubacki; issues: #14501
Methods HttpServer.registerServer and HttpServer.deregisterServer are deprecated. Lookup is preferred way how to find HttpServer.Impl.

Added helper methods to aid module developers to write code which works correctly with multiple monitors

Feb 26 '02; API spec. version: 2.5; affected top-level classes: Utilities; made by: ttran; issues: #20882
The added methods are

public static Rectangle getUsableScreenBounds();
public static Rectangle getUsableScreenBounds(GraphicsConfiguration gconf);
public static Rectangle findCenterBounds(Dimension componentSize);
One should use these methods instead of calling Toolkit.getScreenSize(). For the same reason Utilities.getScreenSize() is now deprecated.

Added accessibility method ErrorManager.getDefault () that always returns non-null values

Jan 17 '02; API spec. version: 2.1; affected top-level classes: ErrorManager; made by: jtulach; issues: #16854

This method allows independent libraries (nodes, filesystems, utilities) to use the ErrorManager without testing if it is really present. Just call ErrorManager.getDefault () and you can be sure that a valid instance will be returned.

Also TopManager.getErrorManager is no longer useful (see change) and is now deprecated. It is also not abstract as it just delegates. notifyException is similarly deprecated.

Permit privileged access to mutexes to avoid inner classes

Jun 27 '01; API spec. version: 1.17; affected top-level classes: Mutex
Added a new inner class and a constructor that takes an instance of that inner class as a parameter. The inner class is Privileged. Through its public methods one can enter internal states of the Mutex to which it was passed.

Method setSource made protected in WeakListener

May 12 '01; API spec. version: 1.34; affected top-level classes: WeakListener; made by: anovak; issues: #11519
This method should help in a situation when the delegated listener is gc'ed and the event source does not fire any events for a long time. If the event source will be set, then such WeakListeners will be collected on 25s basis.

Create your own toolbar pool

Apr 27 '01; API spec. version: 1.5; affected top-level classes: ToolbarPool
New constructor of ToolbarPool. Now any module can create its own ToolbarPool and use it.

More flexibility in controlling running of tasks

Apr 27 '01; API spec. version: 1.5; affected top-level classes: Task
Task has new protected constructor for subclasses and methods notifyRunning () and also non-final version of waitFinished ().

Icon & image cache manager added

Mar 9 '01; affected top-level classes: Utilities
Loading icons and images can be done through Utilities.loadImage() that uses cache to avoid duplicate loading of images. mergeImages uses the cache, too, for the results of merge.

HTML browser factory deprecated, use lookup instead

Mar 8 '01; affected top-level classes: HtmlBrowser
HtmlBrower.setFactory() is deprecated and its functionality can be obtained by registering HtmlBrowser.Impl in Lookup folder. This allows to register more browsers in IDE, create customizable browsers and switch between them.

Special exception thrown to request interaction with user

Mar 5 '01; affected top-level classes: UserQuestionException
Added the first revision. This exception is thrown when a process is about to perform some action that requires user confirmation.

Support for merging icons added

Jan 25 '01; affected top-level classes: Utilities
Added method mergeImages(Image image1, Image image2, int x, int y) for merging images.

Can get a list of localizing suffixes

Jan 1 '01; affected top-level classes: NbBundle; made by: jglick
getLocalizingSuffixes added.

Updated DEC -> Compaq OS names

Dec 15 '00; affected top-level classes: Utilities
Operating system OS_DEC changed to OS_TRU64, and added OS_VMS.

Display names for toolbars

Dec 8 '00; affected top-level classes: Toolbar
Added display name support for Toolbar class. New constructors and methods:

ErrorManager.isLoggable added

Dec 2 '00; affected top-level classes: ErrorManager
isLoggable(int severity) added to ErrorManager.

Can create custom weak listeners

Nov 1 '00; affected top-level classes: WeakListener
Added public method create for creating user specified WeakListeners, not only default ones.

Default filter enumeration accepts any non-null value

Oct 19 '00; affected top-level classes: FilterEnumeration
FilterEnumeration is no longer abstract. The default implementation accepts all non-null values.

Can find localized variants of extensionless resources

Oct 6 '00; affected top-level classes: NbBundle; made by: jglick
getLocalizedFile now accepts null extensions to suppress the addition of a dot to the resource name.

Logging and hierarchy support added to ErrorManager

Aug 18 '00; affected top-level classes: ErrorManager
getInstance(String name), log(int severity, String s), and log(String s) added to ErrorManager.

Proper break iterators used when wrapping text strings

Aug 11 '00; affected top-level classes: Utilities
Added method wrapString which uses BreakIterator instead of a flag and a heuristic solution. wrapString(String,int,boolean,boolean) deprecated.
Compatibility: Deprecated version first removed, later re-added with deprecation in the trunk.

Added search for branded variants as part of locale lookup

Jul 20 '00; affected top-level classes: NbBundle; made by: jglick
Added methods getBranding and setBranding. Normally these should only be called by the core implementation during startup, not module authors. All methods to look up localized objects may now also search for branded variants, if applicable.

Using official Apache regexp package

Jul 17 '00; affected top-level classes: CharacterArrayCharacterIterator RE ReaderCharacterIterator RECompiler RESyntaxException StreamCharacterIterator StringCharacterIterator
CharacterArrayCharacterIterator, RE, ReaderCharacterIterator, RECompiler, RESyntaxException, StreamCharacterIterator, and StringCharacterIterator removed. Preferred regexp classes are those from core/release/lib/ext/regexp.jar: org.apache.regexp.*.
Compatibility: The transition should be easy as the removed classes were based on the Apache regexp package. The Apache library will be tracked in the future (at least until the APIs standardize on JDK 1.4+ and can use java.util.regexp).

Cleaned up accidentally public members of Toolbar

Apr 19 '00; affected top-level classes: Toolbar
Several public fields removed from DnDEvent (dx, dy, name, and type); public methods serving only to implement MouseInputListener have been removed (as well as the implements-clause for this interface); BASIC_HEIGHT now final (it was static and only intended as a constant, so this is not incompatible).
Compatibility: First broken, later restored binary compatibility in trunk and boston. It is possible but unlikely that the first two changes could cause incompatibilities; normally only the core implementation uses the Toolbar class anyway.
Binary-compatible

Classloader finder for NbBundle is obsolete

Apr 11 '00; affected top-level classes: NbBundle
NbBundle.ClassLoaderFinder and NbBundle.setClassLoaderFinder have been deprecated; they were quite obsolete.
Compatibility: First removed, later re-added but deprecated in trunk and boston. No one outside of NbBundle and the core implementation should have been using these classes to begin with.

Can request to use textual icons for actions

Mar 23 '00; affected top-level classes: Actions; made by: jglick
ButtonBridge has protected method with which it is possible to specify whether or not to use textual icons rather than empty ones if an action has no icon.

SafeException is a FoldingIOException

Mar 9 '00; affected top-level classes: SafeException
Now extends FoldingIOException, meaning that it should delegate the detail message, etc. to the original.

Window System API

Removal of TopComponent(DataObject) constructor

Apr 2 '03; API spec. version: 4.3; affected top-level classes: TopComponent CloneableTopComponent; made by: jtulach; issues: #32143
Due to separation of openide-loaders.jar the TopComponent (DataObject) and CloneableTopComponent (DataObject) constructors have been removed. Instead of using the old behavior
        new TopComponent (dataObject);
        
please change the code to use TopComponent.NodeName:
        tc = new TopComponent ();
        NodeName.connect (tc, dataObject.getNodeDelegate ());
        

CloneableTopComponent.Ref.getArbitraryComponent method added

Feb 27 '03; API spec. version: 3.41; affected top-level classes: CloneableTopComponent; made by: pzavadsky; issues: #25824
The method getAnyComponent in CloneableTopComponent.Ref class uses NoSuchElementException as a mean indicating there is no component. Moreover the exception is runtime one (unchecked). It forces clients to use try-catch blocks, which doesn't follow rule, which says there shouldn't be used exception for controlling program flow. It is replaced by method getArbitraryComponent which returns null instead of throwing an exception.

New property "WizardPanel_errorMessage" for WizardDescriptor has been added

Feb 20 '03; API spec. version: 3.39; affected top-level classes: WizardDescriptor; made by: dkonecny; issues: #28466
New property with name "WizardPanel_errorMessage" was added to WizardDescriptor class. It is String property and can contain description why the wizard panel is invalid. Non-null value of this property is automatically displayed at the bottom of the wizard panel.

Add new DTD 1.2 for wsmode configuration file

Jul 1 '02; made by: mslama; issues: #25268
Current frame state is now stored. Added attribute for restored frame state, valid only when frame state is maximized. (Restored frame state is state of frame when frame is not maximized, it can be normal or iconified.)

Add new DTD 1.1 for window manager configuration file

Jun 14 '02; made by: mslama; issues: #24451
Support for positioning main windom in MDI mode during first user start.

TopComponent shown state notification methods added to Winsys API

May 10 '02; API spec. version: 2.18; affected top-level classes: TopComponent WindowManager; made by: pzavadsky; issues: #21618
Four new methods has been added to Winsys API, i.e. TopComponent: protected void componentShowing(), protected void componentHidded(), protected void componentOpened(), protected void componentClose(). The last two replaces deprecated protected void openNotify() and protected void closeNotify() methods. Two methods were added also to WindowManager to handle the notifiction via its subclasses: protected void componentShowing(TopComponent) and protected void componentHidden(TopComponent).

Add List TopComponent.availableModes(List modes) method

Apr 23 '02; API spec. version: 2.14; affected top-level classes: TopComponent; made by: dsimonek; issues: #20153
Method availableModes(...) added to TopComponent to allow TopComponent to specify where can be docked.

Add WindowManager.getDefault() method

Mar 21 '02; API spec. version: 2.10; affected top-level classes: WindowManager; made by: dsimonek; issues: #20942
Method WindowManager.getDefault() added to loose coupling between Topmanager and winsys. Old method TopManager.getWindowManager() was deprecated.

Add new DTD 1.1 for workspace configuration file

Jan 6 '02; made by: dsimonek; issues: #19072
Added element for maximized desktop in MDI mode.

Make a top component visible without focus change

Jul 27 '01; affected top-level classes: TopComponent WindowManager
Added method to make component visible without change of focus or frames z-order. If it is not possible to make component visible without change of focus it works in the same way as requestFocus(). New methods:

OK button in notify dialog can be turned off

Apr 11 '01; affected top-level classes: NotifyDescriptor
Added methods isValid and setValid, added property name String constant PROP_VALID. It can be used to change validity (enable/disable) of standard OK button in dialog.

Open and close notification for top components

Mar 7 '01; affected top-level classes: TopComponent WindowManager
Added open and close notification for top components. New methods:

Wizard panels can refuse to go forward

Jan 15 '01; affected top-level classes: WizardDescriptor
WizardDescriptor.Panel.readSettings can throw IllegalStateException. This can be used to indicate that data provided by the previous panels are not OK and that the panel wants the wizard to go back one panel.

Both Swing client properties and descriptor properties checked for wizard steps/image/help

Jan 9 '01; affected top-level classes: WizardDescriptor
Added new functionality without API change. Wizard descriptor creates wizard panel with list of steps/image/help on the left depending on the properties supplied by ((JComponent)WizardDescriptor.current().getComponent()).putClientProperty() or WizardDescriptor.putProperty().

Several members of InputOutput removed

Jun 16 '00; affected top-level classes: InputOutput
Several members of this interface were technically public before and are now deprecated: In fact they were meant to be package-private and were only public due to a quirk of Java's syntax (default modifier inside interfaces is public).
Compatibility: First broken, later re-added but deprecated in trunk and boston. Any code referring to these members is erroneous and must be rewritten. The only useful related member, the InputOutput.NULL constant, is still public and accessible.

XML API

XML attribute and hexadecimal utilities modified

Oct 18 '01; API spec. version: 1.40; affected top-level classes: XMLUtil; issues: #16629
toAttribute(String, char, boolean) method replaced by toAttributeValue(String) and toContent(String, boolean) method replaced by toElementContent(String). These new simplified signatures and particular semantics should cover 99% usage of previous ones. See the original additions.
Compatibility: The original versions of these methods were not in any public release.

XML attribute and hexadecimal utilities added

Aug 8 '01; API spec. version: 1.29; affected top-level classes: XMLUtil
toAttribute(String, char, boolean), toContent(String, boolean), toHex(byte[], int, int) and fromHex(char[], int, int) methods added.

Direct registration of XML catalog entries deprecated

Mar 3 '01; affected top-level classes: XMLDataObject; made by: pkuzel
Deprecated registerCatalogEntry() methods.

Independent XML API created

Mar 3 '01; affected top-level classes: XMLUtil EntityCatalog; affected packages: org.openide.xml; made by: pkuzel
XMLUtil utility class introduced. The class provides set of static methods useful for XML processing. EntityCatalog class introduced. It provides access to entity mapping registrations provided by installed modules.

Moved XML static methods into separate inner class

Feb 16 '01; affected top-level classes: XMLDataObject; made by: pkuzel

Compatibility: XMLDataObject.Util itself deprecated on Mar 3 '01 in favor of XMLUtil.

Updated DOM to level 2 and added document writability

Jan 26 '01; affected top-level classes: XMLDataObject; made by: pkuzel

Compatibility: Any code implementing DOM interfaces could be broken by the level 2 interfaces. Clients of the DOM API should be unaffected.

Can register entity resolvers

Dec 20 '00; affected top-level classes: XMLDataObject
addEntityResolver and removeEntityResolver added. These methods allow a user to develop own implementation of functionality similar to registerCatalogEntry. E.g. a user can register EntityResolver that reads data from persistent catalog avoiding bunch of calls to the register method in module restore code.
Compatibility: Subsequently deprecated on Mar 3 '01 by EntityCatalog.

Uncategorized changes

API separation, phase II

Nov 1 '02; API spec. version: 3.17; affected top-level classes: AbstractCompileAction BuildAction BuildAllAction CleanAction CleanAllAction CompileAction CompileAllAction ExecuteAction ArgumentsCookie CompilerCookie ExecCookie FileUtil CompilerSupport ExecutionSupport IOProvider InputOutput OutputEvent OutputListener OutputWriter; affected packages: org.openide.compiler org.openide.execution; made by: jglick; issues: #19443

Three sections of the Open APIs were split into new autoload modules.

New modules wishing to use these APIs must declare regular module dependencies on them. Future changes in these APIs will be documented separately.

Furthermore, modules wishing to use certain services must OpenIDE-Module-Require them if appropriate:

Other minor changes:


Compatibility:

Module authors using the now-separated APIs will need to adjust their compilation classpaths to include the new JAR files. Modules wishing to use recent APIs and declaring a current openide specification version dependency will need to explicitly declare dependencies on these new APIs if there are any.

For compatibility, modules with no declared Open APIs dependency, or declared on a version prior to 3.17, will have their dependencies automatically refined as if to include the declarations:

OpenIDE-Module-Module-Dependencies: org.openide.compiler > 1.0,
  org.openide.execution > 1.0, org.openide.io > 1.0
OpenIDE-Module-Requires: org.openide.compiler.CompilationEngine,
  org.openide.execution.ExecutionEngine, org.openide.windows.IOProvider
        

And any package dependencies from old modules on org.netbeans.lib.terminalemulator will be converted to module dependencies.


Binary-compatible

API separation, phase I

Oct 15 '02; API spec. version: 3.14; affected top-level classes: DialogDisplayer LifecycleManager Places TopManager AddWatchAction BuildProjectAction CompileProjectAction DebugProjectAction ExecuteProjectAction FinishDebuggerAction GoAction GoToCursorAction HelpAction OpenProjectAction SaveProjectAction StartDebuggerAction StepOutAction ToggleBreakpointAction TraceIntoAction TraceOverAction HtmlBrowser StatusDisplayer DebuggerCookie ElementCookie ProjectCookie SourceCookie ChoicePropertyEditor DirectoryOnlyEditor ElementFormatEditor ExternalCompiler FileEditor FileOnlyEditor IconEditor IdentifierArrayEditor MethodParameterArrayEditor ModifierEditor StringArrayCustomEditor StringArrayCustomizable StringArrayEditor TypeEditor DataObjectFilter ExecSupport ExecutionSupport ExtensionListEditor RepositoryNodeFactory IllegalModuleException ManifestSection ModuleDescription NodeOperation ControlPanel ProjectSensitiveAction IOProvider; affected packages: org.openide.debugger org.openide.src org.openide.src.nodes; made by: jglick; issues: #19443 #20898

Many classes were moved to a separate module, openide-deprecated.jar, not available to modules by default. Uses of these classes in modules should be cleaned up whenever possible.

Additionally, the entire contents of org.openide.src.* and org.openide.src.nodes.*, as well as org.openide.cookies.SourceCookie and some associated property editors, were moved to a separate module.

The most common apparent symptom for module authors will be the absence of TopManager. Most methods in this class have been replaced by newer utility classes in a straightforward manner. See the Upgrade Guide.


Compatibility:

The deprecated classes continue to be available in the module org.openide.deprecated which you may depend on it you cannot remove uses of the deprecated APIs. In order for TopManager.getDefault() to work, you must also require the token org.openide.TopManager, which is provided by an unspecified module. The deprecated API module and its implementation module are autoloads, meaning they will not be loaded unless some module still requires them.

Similarly, the Java Hierarchy API was moved to the module org.openide.src which you should depend on in order to use this API.

For compatibility, the above three dependencies are added to your module automatically in case it either requests no specific API version at all, or requests an API version prior to 3.14. Modules requesting APIs 3.14 or higher must declare these dependencies explicitly if they in fact need them.


Binary-compatible

EditorSupport problem

Summary

This section describes incompatibilities in the APIs caused by refactoring the org.openide.text.EditorSupport class and its relatives, breaking compatibility and then later fixing the problem.

Description

The EditorSupport in NetBeans Stable 3.0 (Forte for Java 1.0.x) was a subclass of org.openide.loaders.OpenSupport and was a very heavyweight class (6000+ lines), that needed refactoring.

The refactoring process split the code in EditorSupport into several classes to make it suitable for more situations and permit modules to substitute their own implementation layers into it. Some new classes were introduced. org.openide.windows.CloneableOpenSupport deals with sets of CloneableTopComponents, while org.openide.text.CloneableEditorSupport subclasses CloneableOpenSupport and provides the basic interface to communicate with editors in the IDE. Because nearly all the functionality of EditorSupport has been moved to the "cloneable one", we thought it would be natural for the EditorSupport to change its superclass to CloneableEditorSupport.

We did it and of course we tried to keep everything compatible and we ensured that what could be compiled against the old version could also be compiled against the new version. But later we found that we were breaking binary compatibility.

In other words, modules compiled against the old code and run against the new code are refused by the Java VM verifier. The code is not binary compatible. This was due to the use of protected fields which moved between superclasses.

For this reason we did another refactoring and now we have both binary and source compatibility.

Drawbacks

During a period of time, the code was in a state that was not binary-compatible with the current (and future) version. Worse, the Forte for Java 2.0 Beta release contains this bad code, because we found the problem too late in the testing cycle to fix it for the beta.

So if you develop a module that is compiled against FFJ 2.0 Beta and you are using EditorSupport, your code might not work with NetBeans releases and the FCS (final release) of FFJ 2.0 Beta. You will need to recompile it once again.

We apologize for the confusion and extra work this problem may have introduced.


Built on October 20 2003.  |  Portions Copyright 1997-2003 Sun Microsystems, Inc. All rights reserved.