blob: 6970839207e313b098c4263e6d07208d797ac546 [file] [log] [blame]
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Change History for the Lookup API</title>
<link rel="stylesheet" href="prose.css" type="text/css">
</head>
<body>
<p class="overviewlink">
<a href="overview-summary.html" shape="rect">Overview</a>
</p>
<h1>Introduction</h1>
<h2>What do the Dates Mean?</h2>
<p>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.</p>
<ul>
<li>The <code>release41</code> branch was made on Apr 03 '05 for use in the NetBeans 4.1 release.
Specification versions: 6.0 begins after this point.</li>
<li>The <code>release40</code> branch was made on Nov 01 '04 for use in the NetBeans 4.0 release.
Specification versions: 5.0 begins after this point.</li>
</ul>
<hr>
<h1>
<a name="list-all-apis">Index of APIs</a>
</h1>
<ul>
<li>
<a href="#lookup">Lookup API</a>
</li>
</ul>
<h1>
<a name="incompat-by-date">Incompatible changes by date</a>
</h1>
<p>Fuller descriptions of all changes can be found below (follow links).</p>
<p>Not all deprecations are listed here, assuming that the deprecated
APIs continue to essentially work. For a full deprecation list, please
consult the
<a href="deprecated-list.html">Javadoc</a>.</p>
<ul>
<li>(Oct 22 '14) <a href="#lookups.execute">A way to control Lookup.getDefault</a>
</li>
<li>(Mar 10 '12) <a href="#lazy.proxy.lookup"><code>ProxyLookup</code> computes results lazily</a>
</li>
<li>(Apr 3 '06) <a href="#lookupAll-lookupResult">Convenience methods added to <code>Lookup</code></a>
</li>
</ul>
<h1>
<a name="all-by-date">All changes by date</a>
</h1>
<ul>
<li>(Oct 22 '14) <a href="#lookups.execute">A way to control Lookup.getDefault</a>
</li>
<li>(Mar 27 '12) <a href="#named.service.definition">Easy and robust way to register named services</a>
</li>
<li>(Mar 10 '12) <a href="#lazy.proxy.lookup"><code>ProxyLookup</code> computes results lazily</a>
</li>
<li>(Jan 15 '10) <a href="#named.services.provider">Introducing semihidden SPI</a>
</li>
<li>(Dec 20 '09) <a href="#lookup.is.free">Separate module for Lookup API</a>
</li>
<li>(Jun 19 '09) <a href="#org.openide.util.Lookup.paths">Added
<code>org.openide.util.Lookup.paths</code> property
</a>
</li>
<li>(Nov 1 '08) <a href="#ServiceProvider">Added <code>ServiceProvider</code> annotation</a>
</li>
<li>(Jun 27 '08) <a href="#Lookup.asynchronous">AbstractLookup and ProxyLookup fire changes asynchronously</a>
</li>
<li>(Apr 17 '07) <a href="#Lookups.forPath">Added simplified support for named lookups <code>Lookups.forPath</code></a>
</li>
<li>(Apr 3 '06) <a href="#lookupAll-lookupResult">Convenience methods added to <code>Lookup</code></a>
</li>
<li>(Nov 11 '05) <a href="#less-events-from-proxylookup">Less change notifications from ProxyLookup</a>
</li>
<li>(Jan 14 '05) <a href="#excluding-lookup">
<code>Lookups.exclude</code> added to simplify writing of lookups that filter content of other lookups</a>
</li>
<li>(May 9 '04) <a href="#issue-41606">Added ability to order items in META-INF/services/ lookup</a>
</li>
<li>(Jul 9 '03) <a href="#version-4.8">New <code>lookupItem()</code> method in Lookups</a>
</li>
<li>(Feb 5 '03) <a href="#issue-29126">New method Lookups.metaInfServices</a>
</li>
<li>(Jan 7 '03) <a href="#issue-20190">Folder lookup may be serialized</a>
</li>
<li>(Sep 20 '02) <a href="#issue-27425">New method Lookups.proxy</a>
</li>
<li>(Jul 22 '02) <a href="#meta-inf-services">Modules can specify the content of Lookup.getDefault
in META-INF/services</a>
</li>
<li>(May 28 '02) <a href="#issue-20550">Added org.openide.util.lookup.Lookups</a>
</li>
<li>(Aug 18 '01) <a href="#AbstractLookup.Content-ProxyLookup.beforeLookup">Enhanced usage of ProxyLookup &amp; AbstractLookup.Content</a>
</li>
<li>(Jul 8 '01) <a href="#version-1.19">Changes in access protection of proxy lookup</a>
</li>
<li>(Jun 1 '01) <a href="#version-1.9">Lookup service providers package created</a>
</li>
<li>(May 25 '01) <a href="#version-1.8">Added lookup items and support APIs</a>
</li>
<li>(Mar 1 '01) <a href="#1.02992453E8">Lookup system introduced</a>
</li>
<li>
<a href="#version-1.25">Instance content simplifies creation of lookups</a>
</li>
</ul>
<h1>
<a name="all-by-version">Changes by version</a>
</h1>
<p>
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 <samp>1.20</samp>, your
manifest should contain in its main attributes the line:
</p>
<pre>OpenIDE-Module-Module-Dependencies: $codebase &gt; 1.20</pre>
<ul>
<li>
(8.30) <a href="#lookups.execute">A way to control Lookup.getDefault</a>
</li>
<li>
(8.14) <a href="#named.service.definition">Easy and robust way to register named services</a>
</li>
<li>
(8.13) <a href="#lazy.proxy.lookup"><code>ProxyLookup</code> computes results lazily</a>
</li>
<li>
(8.1) <a href="#named.services.provider">Introducing semihidden SPI</a>
</li>
<li>
(8.0) <a href="#lookup.is.free">Separate module for Lookup API</a>
</li>
<li>
(7.24) <a href="#org.openide.util.Lookup.paths">Added
<code>org.openide.util.Lookup.paths</code> property
</a>
</li>
<li>
(7.20) <a href="#ServiceProvider">Added <code>ServiceProvider</code> annotation</a>
</li>
<li>
(7.16) <a href="#Lookup.asynchronous">AbstractLookup and ProxyLookup fire changes asynchronously</a>
</li>
<li>
(7.9) <a href="#Lookups.forPath">Added simplified support for named lookups <code>Lookups.forPath</code></a>
</li>
<li>
(6.10) <a href="#lookupAll-lookupResult">Convenience methods added to <code>Lookup</code></a>
</li>
<li>
(6.7) <a href="#less-events-from-proxylookup">Less change notifications from ProxyLookup</a>
</li>
<li>
(5.4) <a href="#excluding-lookup">
<code>Lookups.exclude</code> added to simplify writing of lookups that filter content of other lookups</a>
</li>
<li>
(4.34) <a href="#issue-41606">Added ability to order items in META-INF/services/ lookup</a>
</li>
<li>
(4.8) <a href="#version-4.8">New <code>lookupItem()</code> method in Lookups</a>
</li>
<li>
(3.35) <a href="#issue-29126">New method Lookups.metaInfServices</a>
</li>
<li>
(3.27) <a href="#issue-20190">Folder lookup may be serialized</a>
</li>
<li>
(3.9) <a href="#issue-27425">New method Lookups.proxy</a>
</li>
<li>
(3.3) <a href="#meta-inf-services">Modules can specify the content of Lookup.getDefault
in META-INF/services</a>
</li>
<li>
(2.21) <a href="#issue-20550">Added org.openide.util.lookup.Lookups</a>
</li>
<li>
(1.31) <a href="#AbstractLookup.Content-ProxyLookup.beforeLookup">Enhanced usage of ProxyLookup &amp; AbstractLookup.Content</a>
</li>
<li>
(1.25) <a href="#version-1.25">Instance content simplifies creation of lookups</a>
</li>
<li>
(1.19) <a href="#version-1.19">Changes in access protection of proxy lookup</a>
</li>
<li>
(1.9) <a href="#version-1.9">Lookup service providers package created</a>
</li>
<li>
(1.8) <a href="#version-1.8">Added lookup items and support APIs</a>
</li>
</ul>
<h1>
<a name="all-by-class">Changes by affected class</a>
</h1>
<h2>
<a name="org.openide.util.lookup.AbstractLookup"><code><span style="color:gray">org.openide.util.lookup.</span>AbstractLookup</code></a>
</h2><ul><li>(Dec 20 '09) <a href="#lookup.is.free">Separate module for Lookup API</a>
</li>
<li>(Jun 27 '08) <a href="#Lookup.asynchronous">AbstractLookup and ProxyLookup fire changes asynchronously</a>
</li>
<li>(Nov 11 '05) <a href="#less-events-from-proxylookup">Less change notifications from ProxyLookup</a>
</li>
<li>(Jan 7 '03) <a href="#issue-20190">Folder lookup may be serialized</a>
</li>
<li>(Aug 18 '01) <a href="#AbstractLookup.Content-ProxyLookup.beforeLookup">Enhanced usage of ProxyLookup &amp; AbstractLookup.Content</a>
</li>
<li>(Jun 1 '01) <a href="#version-1.9">Lookup service providers package created</a>
</li>
<li>
<a href="#version-1.25">Instance content simplifies creation of lookups</a>
</li></ul><h2>
<a name="org.openide.util.lookup.InstanceContent"><code><span style="color:gray">org.openide.util.lookup.</span>InstanceContent</code></a>
</h2><ul><li>(Jun 27 '08) <a href="#Lookup.asynchronous">AbstractLookup and ProxyLookup fire changes asynchronously</a>
</li>
<li>
<a href="#version-1.25">Instance content simplifies creation of lookups</a>
</li></ul><h2>
<a name="org.openide.util.Lookup"><code><span style="color:gray">org.openide.util.</span>Lookup</code></a>
</h2><ul><li>(Dec 20 '09) <a href="#lookup.is.free">Separate module for Lookup API</a>
</li>
<li>(Jun 19 '09) <a href="#org.openide.util.Lookup.paths">Added
<code>org.openide.util.Lookup.paths</code> property
</a>
</li>
<li>(Apr 3 '06) <a href="#lookupAll-lookupResult">Convenience methods added to <code>Lookup</code></a>
</li>
<li>(May 25 '01) <a href="#version-1.8">Added lookup items and support APIs</a>
</li>
<li>(Mar 1 '01) <a href="#1.02992453E8">Lookup system introduced</a>
</li></ul><h2>
<a name="org.openide.util.LookupEvent"><code><span style="color:gray">org.openide.util.</span>LookupEvent</code></a>
</h2><ul><li>(Mar 1 '01) <a href="#1.02992453E8">Lookup system introduced</a>
</li></ul><h2>
<a name="org.openide.util.LookupListener"><code><span style="color:gray">org.openide.util.</span>LookupListener</code></a>
</h2><ul><li>(Mar 1 '01) <a href="#1.02992453E8">Lookup system introduced</a>
</li></ul><h2>
<a name="org.openide.util.lookup.Lookups"><code><span style="color:gray">org.openide.util.lookup.</span>Lookups</code></a>
</h2><ul><li>(Oct 22 '14) <a href="#lookups.execute">A way to control Lookup.getDefault</a>
</li>
<li>(Dec 20 '09) <a href="#lookup.is.free">Separate module for Lookup API</a>
</li>
<li>(Apr 17 '07) <a href="#Lookups.forPath">Added simplified support for named lookups <code>Lookups.forPath</code></a>
</li>
<li>(Jan 14 '05) <a href="#excluding-lookup">
<code>Lookups.exclude</code> added to simplify writing of lookups that filter content of other lookups</a>
</li>
<li>(May 9 '04) <a href="#issue-41606">Added ability to order items in META-INF/services/ lookup</a>
</li>
<li>(Jul 9 '03) <a href="#version-4.8">New <code>lookupItem()</code> method in Lookups</a>
</li>
<li>(Feb 5 '03) <a href="#issue-29126">New method Lookups.metaInfServices</a>
</li>
<li>(Sep 20 '02) <a href="#issue-27425">New method Lookups.proxy</a>
</li>
<li>(May 28 '02) <a href="#issue-20550">Added org.openide.util.lookup.Lookups</a>
</li></ul><h2>
<a name="org.openide.util.lookup.NamedServiceDefinition"><code><span style="color:gray">org.openide.util.lookup.</span>NamedServiceDefinition</code></a>
</h2><ul><li>(Mar 27 '12) <a href="#named.service.definition">Easy and robust way to register named services</a>
</li></ul><h2>
<a name="org.openide.util.lookup.ProxyLookup"><code><span style="color:gray">org.openide.util.lookup.</span>ProxyLookup</code></a>
</h2><ul><li>(Dec 20 '09) <a href="#lookup.is.free">Separate module for Lookup API</a>
</li>
<li>(Jun 27 '08) <a href="#Lookup.asynchronous">AbstractLookup and ProxyLookup fire changes asynchronously</a>
</li>
<li>(Nov 11 '05) <a href="#less-events-from-proxylookup">Less change notifications from ProxyLookup</a>
</li>
<li>(Jan 7 '03) <a href="#issue-20190">Folder lookup may be serialized</a>
</li>
<li>(Aug 18 '01) <a href="#AbstractLookup.Content-ProxyLookup.beforeLookup">Enhanced usage of ProxyLookup &amp; AbstractLookup.Content</a>
</li>
<li>(Jul 8 '01) <a href="#version-1.19">Changes in access protection of proxy lookup</a>
</li>
<li>(Jun 1 '01) <a href="#version-1.9">Lookup service providers package created</a>
</li></ul><h2>
<a name="org.openide.util.lookup.ServiceProvider"><code><span style="color:gray">org.openide.util.lookup.</span>ServiceProvider</code></a>
</h2><ul><li>(Nov 1 '08) <a href="#ServiceProvider">Added <code>ServiceProvider</code> annotation</a>
</li></ul><h2>
<a name="org.openide.util.lookup.ServiceProviders"><code><span style="color:gray">org.openide.util.lookup.</span>ServiceProviders</code></a>
</h2><ul><li>(Nov 1 '08) <a href="#ServiceProvider">Added <code>ServiceProvider</code> annotation</a>
</li></ul><hr>
<h1>
<a name="details-by-api">Details of all changes by API and date</a>
</h1>
<hr style="width:50%">
<h2>
<a name="lookup">Lookup API</a>
</h2>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="lookups.execute">A way to control Lookup.getDefault</a>
</h3>
<em>Oct 22 '14; API spec. version: 8.30; affected top-level classes: <a href="./org/openide/util/lookup/Lookups.html"><code>Lookups</code></a>; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=247930">
#247930</a></em>
<br>
<p>
One can use <a href="org/openide/util/lookup/Lookups.html#executeWith-org.openide.util.Lookup-java.lang.Runnable-" shape="rect">
Lookups.execute(yourLookup, yourRunnable)
</a> to temporarily influence return value from
<a href="org/openide/util/Lookup.html#getDefault--" shape="rect">
Lookup.getDefault()</a>.
</p>
<br>
<strong>Compatibility: </strong>
The clients of <a href="org/openide/util/Lookup.html#getDefault--" shape="rect">
Lookup.getDefault()</a> are mostly unaffected by this change,
just they need to be ready for the fact that the return
value of the method may no longer be fixed one, but can mutate
over time.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="named.service.definition">Easy and robust way to register named services</a>
</h3>
<em>Mar 27 '12; API spec. version: 8.14; affected top-level classes: <a href="./org/openide/util/lookup/NamedServiceDefinition.html"><code>NamedServiceDefinition</code></a>; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=209780">
#209780</a></em>
<br>
<p>
Meta annotation
<a href="org/openide/util/lookup/NamedServiceDefinition.html" shape="rect">NamedServiceDefinition</a>
for those who define their own annotations that register
something into
<a href="org/openide/util/lookup/Lookups.html#forPath-java.lang.String-" shape="rect">
Lookups.forPath</a> registration area.
</p>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="lazy.proxy.lookup"><code>ProxyLookup</code> computes results lazily</a>
</h3>
<em>Mar 10 '12; API spec. version: 8.13; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=209322">
#209322</a></em>
<br>
<p>
<a href="org/openide/util/lookup/ProxyLookup.html" shape="rect">
ProxyLookup.lookupAll().iterator()</a> is now incremental.
E.g. you can use traverse part of the results without
waiting for or creating all of them:
</p>
<pre xml:space="preserve">
for (<a href="http://download.oracle.com/javase/8/docs/api/java/net/URLStreamHandlerFactory.html" shape="rect">URLStreamHandlerFactory</a> first : <a href="org/openide/util/Lookup.html#getDefault--" shape="rect">Lookup.getDefault()</a>.lookupAll(<a href="http://download.oracle.com/javase/8/docs/api/java/net/URLStreamHandlerFactory.html" shape="rect">URLStreamHandlerFactory</a>.class)) {
return first;
}
</pre>
<br>
<strong>Compatibility: </strong>
<p>
Calling <a href="org/openide/util/lookup/ProxyLookup.html" shape="rect">
ProxyLookup.lookupAll()</a> and other methods that compute
aggregate results delays computation of the result. This
may affect code which called
<a href="org/openide/util/Lookup.Result.html" shape="rect">Lookup.Result</a>.<code>allItems</code>,
<code>allInstances</code> or <code>allClasses</code> and relied
on side effect of such call. In case you want to trigger the
computation call some method on the returned
<a href="http://download.oracle.com/javase/8/docs/api/java/util/Collection.html" shape="rect">Collection</a>
(other than <code>iterator()</code>) like <code>size()</code>
or <code>isEmpty</code>.
</p>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="named.services.provider">Introducing semihidden SPI</a>
</h3>
<em>Jan 15 '10; API spec. version: 8.1; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=179289">
#179289</a></em>
<br>
<p>
Adding SPI interface package for those who implement
the NetBeans platform. This package is not shown in Javadoc
as it does not form a generally available public API.
</p>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="lookup.is.free">Separate module for Lookup API</a>
</h3>
<em>Dec 20 '09; API spec. version: 8.0; affected top-level classes: <a href="./org/openide/util/Lookup.html"><code>Lookup</code></a> <a href="./org/openide/util/lookup/AbstractLookup.html"><code>AbstractLookup</code></a> <a href="./org/openide/util/lookup/ProxyLookup.html"><code>ProxyLookup</code></a> <a href="./org/openide/util/lookup/Lookups.html"><code>Lookups</code></a>; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=170056">
#170056</a></em>
<br>
<p>
<a href="../org-openide-util-lookup/org/openide/util/Lookup.html" shape="rect">Lookup</a>
and its associated interfaces are now available as a
<a href="../org-openide-util-lookup/overview-summary.html" shape="rect">separate module</a>.
</p>
<br>
<strong>Compatibility: </strong>
<p>
Runtime compatibility remains, compile time compatibility is
mostly preserved too. It is however recommended to upgrade
dependencies of your modules. Try running
<code>ant fix-dependencies</code> in your Ant module.
</p>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="org.openide.util.Lookup.paths">Added
<code>org.openide.util.Lookup.paths</code> property
</a>
</h3>
<em>Jun 19 '09; API spec. version: 7.24; affected top-level classes: <a href="./org/openide/util/Lookup.html"><code>Lookup</code></a>; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=166782">
#166782</a></em>
<br>
<p>
Better way to integrate Lookup.getDefault() and system filesystem.
</p>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="ServiceProvider">Added <code>ServiceProvider</code> annotation</a>
</h3>
<em>Nov 1 '08; API spec. version: 7.20; affected top-level classes: <a href="./org/openide/util/lookup/ServiceProvider.html"><code>ServiceProvider</code></a> <a href="./org/openide/util/lookup/ServiceProviders.html"><code>ServiceProviders</code></a>; made by: jglick; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=150447">
#150447</a></em>
<br>
<p>
Added annotations <code>ServiceProvider</code> and <code>ServiceProviders</code>
to simplify registration of global singleton services.
</p>
<br>
<strong>Compatibility: </strong>
<p>
Modules registering services using <code>META-INF/services</code>
files in the source tree are encouraged to switch to the annotation.
</p>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="Lookup.asynchronous">AbstractLookup and ProxyLookup fire changes asynchronously</a>
</h3>
<em>Jun 27 '08; API spec. version: 7.16; affected top-level classes: <a href="./org/openide/util/lookup/AbstractLookup.html"><code>AbstractLookup</code></a> <a href="./org/openide/util/lookup/ProxyLookup.html"><code>ProxyLookup</code></a> <a href="./org/openide/util/lookup/InstanceContent.html"><code>InstanceContent</code></a>; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=134297">
#134297</a></em>
<br>
<p>
All modification methods in <code>AbstractLookup</code> and <code>ProxyLookup</code>
were extended to accept an
<a href="http://download.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html" shape="rect">Executor</a>.
If not null, it is used to dispatch events to listeners sometime
"later". Also the <code>AbstractLookup.Content</code>
and <code>InstanceContent</code> constructors
have been extended to accept such <code>Executor</code>s.
</p>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="Lookups.forPath">Added simplified support for named lookups <code>Lookups.forPath</code></a>
</h3>
<em>Apr 17 '07; API spec. version: 7.9; affected top-level classes: <a href="./org/openide/util/lookup/Lookups.html"><code>Lookups</code></a>; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=98426">
#98426</a></em>
<br>
<p>
New method <a href="org/openide/util/lookup/Lookups.html#forPath-java.lang.String-" shape="rect">Lookups.forPath(String)</a>
has been added to replace now deprecated <a href="../org-openide-loaders/org/openide/loaders/FolderLookup.html" shape="rect">FolderLookup</a>
and allow modules who wants to read settings from layers
to do so with a simpler code, without dependency on DataSystems API.
</p>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="lookupAll-lookupResult">Convenience methods added to <code>Lookup</code></a>
</h3>
<em>Apr 3 '06; API spec. version: 6.10; affected top-level classes: <a href="./org/openide/util/Lookup.html"><code>Lookup</code></a>; made by: jglick; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=73848">
#73848</a></em>
<br>
<p>
Two methods, <code>lookupResult</code> and <code>lookupAll</code>, were
added to <code>Lookup</code> to encapsulate the most common usage patterns
with less typing, and more importantly avoiding the need to explicitly
make a <code>Lookup.Template</code> object.
</p>
<br>
<strong>Compatibility: </strong>
<p>
Could conceivably conflict with existing subclass method with same signature
with different semantics or return type.
</p>
<br>
<em><a href="http://wiki.netbeans.org/VersioningPolicy#Compatible_change_on_the_trunk">Binary-compatible</a></em>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="less-events-from-proxylookup">Less change notifications from ProxyLookup</a>
</h3>
<em>Nov 11 '05; API spec. version: 6.7; affected top-level classes: <a href="./org/openide/util/lookup/ProxyLookup.html"><code>ProxyLookup</code></a> <a href="./org/openide/util/lookup/AbstractLookup.html"><code>AbstractLookup</code></a>; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=68031">
#68031</a></em>
<br>
<a href="org/openide/util/lookup/ProxyLookup.html" shape="rect">ProxyLookup.setLookups</a>
used to fire <a href="org/openide/util/LookupEvent.html" shape="rect">LookupEvent</a> every
time it was called. Now it always checks whether there was a change to the
previous state. This will reduce the number of events delivered when a small
change is made. Also results from both
<a href="org/openide/util/lookup/ProxyLookup.html" shape="rect">ProxyLookup</a>
and <a href="org/openide/util/lookup/AbstractLookup.html" shape="rect">AbstractLookup</a>
were modified to return immutable <code>Collection</code>s.
So do not try to modify them. It was always documented that the
results, are immutable and also it was never said that a change is
delivered when there is no change in the result, so this is considered
compatible change, even it is know that at least one piece of code
in NetBeans relied on this behaviour.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="excluding-lookup">
<code>Lookups.exclude</code> added to simplify writing of lookups that filter content of other lookups</a>
</h3>
<em>Jan 14 '05; API spec. version: 5.4; affected top-level classes: <a href="./org/openide/util/lookup/Lookups.html"><code>Lookups</code></a>; made by: jtulach; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=53058">
#53058</a></em>
<br>
<p>New method that takes lookup and set of classes and return new lookup
which contains everything from the original one except instances of
the specified classes has been added.
</p>
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! -->
<h3>
<a name="issue-41606">Added ability to order items in META-INF/services/ lookup</a>
</h3>
<em>May 9 '04; API spec. version: 4.34; affected top-level classes: <a href="./org/openide/util/lookup/Lookups.html"><code>Lookups</code></a>; made by: dkonecny; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=41606">
#41606</a></em>
<br>
Items in META-INF/services/ lookup can be followed by advisory
"position" attribute. The resulting lookup will list first items with lower
position value. Items without position attribute will be listed
last. See documentation for more details on format.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="version-4.8">New <code>lookupItem()</code> method in Lookups</a>
</h3>
<em>Jul 9 '03; API spec. version: 4.8; affected top-level classes: <a href="./org/openide/util/lookup/Lookups.html"><code>Lookups</code></a>; made by: vstejskal</em>
<br>
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).
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="issue-29126">New method Lookups.metaInfServices</a>
</h3>
<em>Feb 5 '03; API spec. version: 3.35; affected top-level classes: <a href="./org/openide/util/lookup/Lookups.html"><code>Lookups</code></a>; made by: dstrupl; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=29126">
#29126</a></em>
<br>
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.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="issue-20190">Folder lookup may be serialized</a>
</h3>
<em>Jan 7 '03; API spec. version: 3.27; affected top-level classes: <a href="./org/openide/util/lookup/AbstractLookup.html"><code>AbstractLookup</code></a> <a href="./org/openide/util/lookup/ProxyLookup.html"><code>ProxyLookup</code></a>; made by: jglick; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=20190">
#20190</a></em>
<br>
To implement lookup caching, some lookup implementations are now
serializable: <code>AbstractLookup</code> as well as
<code>FolderLookup</code>'s lookup. <code>ProxyLookup</code> has a
protected subclass constructor permitting subclasses to be serializable.
<br>
<strong>Compatibility: </strong>
Modules which rely on a data object under <samp>Services/</samp> gaining
or losing <code>InstanceCookie</code> between sessions may not work
correctly with the cache. This is probably very rare.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="issue-27425">New method Lookups.proxy</a>
</h3>
<em>Sep 20 '02; API spec. version: 3.9; affected top-level classes: <a href="./org/openide/util/lookup/Lookups.html"><code>Lookups</code></a>; made by: dstrupl; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=27425">
#27425</a></em>
<br>
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).
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="meta-inf-services">Modules can specify the content of Lookup.getDefault
in META-INF/services</a>
</h3>
<em>Jul 22 '02; API spec. version: 3.3; made by: jtulach</em>
<br>
The content of <code>Lookup.getDefault()</code> can be specified
by a standard JDK registration mechanism, using JARs'
<a href="http://java.sun.com/j2se/1.4/docs/guide/jar/jar.html#Service%20Provider" shape="rect">
META-INF/services
</a>
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.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="issue-20550">Added org.openide.util.lookup.Lookups</a>
</h3>
<em>May 28 '02; API spec. version: 2.21; affected top-level classes: <a href="./org/openide/util/lookup/Lookups.html"><code>Lookups</code></a>; made by: dstrupl; issues: <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=20550">
#20550</a></em>
<br>New utility class added. The class cannot be instantiated
and contains following static methods:
<pre xml:space="preserve">
<span class="keyword">public</span> <span class="keyword">static</span> <span class="type">Lookup</span> <span class="function-name">singleton</span>(<span class="type">Object</span> <span class="variable-name">objectToLookup</span>);
<span class="keyword">public</span> <span class="keyword">static</span> <span class="type">Lookup</span> <span class="function-name">fixed</span>(<span class="type">Object</span>[] <span class="variable-name">objectsToLookup</span>);
<span class="keyword">public</span> <span class="keyword">static</span> <span class="type">Lookup</span> <span class="function-name">fixed</span>(<span class="type">Object</span>[] <span class="variable-name">keys</span>, <span class="type">InstanceContent.Convertor</span> <span class="variable-name">convertor</span>);
</pre>
The methods return an instance of simple lookup implementation
that holds the objects passed a parameter.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="AbstractLookup.Content-ProxyLookup.beforeLookup">Enhanced usage of ProxyLookup &amp; AbstractLookup.Content</a>
</h3>
<em>Aug 18 '01; API spec. version: 1.31; affected top-level classes: <a href="./org/openide/util/lookup/AbstractLookup.html"><code>AbstractLookup</code></a> <a href="./org/openide/util/lookup/ProxyLookup.html"><code>ProxyLookup</code></a>; made by: jtulach</em>
<br>
<code>AbstractLookup.Content</code> made public to allow its usage
for objects that do not subclass AbstractLookup. <code>ProxyLookup.beforeLookup</code>
added so subclasses can update themselves (call setLookups (...)) before the actual lookup is
performed.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="version-1.19">Changes in access protection of proxy lookup</a>
</h3>
<em>Jul 8 '01; API spec. version: 1.19; affected top-level classes: <a href="./org/openide/util/lookup/ProxyLookup.html"><code>ProxyLookup</code></a></em>
<br>
<code>ProxyLookup.setLookups</code> made protected instead of public so
nobody can misuse the method except the creator of the object and
<code>ProxyLookup.getLookups</code> added. <code>ProxyLookup</code> made
non final.
<br>
<strong>Compatibility: </strong>
Changes to newly added feature.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="version-1.9">Lookup service providers package created</a>
</h3>
<em>Jun 1 '01; API spec. version: 1.9; affected top-level classes: <a href="./org/openide/util/lookup/AbstractLookup.html"><code>AbstractLookup</code></a> <a href="./org/openide/util/lookup/ProxyLookup.html"><code>ProxyLookup</code></a>; affected packages: <a href="./org/openide/util/lookup/package-summary.html"><code>org.openide.util.lookup</code></a>; made by: jtulach</em>
<br>
Package <code>org.openide.util.lookup</code> created, should hold SPI
interfaces for lookup. Initially filled with <code>AbstractLookup</code>
which introduces <code>AbstractLookup.Pair</code> and with
<code>ProxyLookup</code>.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="version-1.8">Added lookup items and support APIs</a>
</h3>
<em>May 25 '01; API spec. version: 1.8; affected top-level classes: <a href="./org/openide/util/Lookup.html"><code>Lookup</code></a>; made by: jtulach</em>
<br>
<code>Lookup</code> enhanced. Interface <code>Lookup.Item</code> and
additional methods to access it also added.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="1.02992453E8">Lookup system introduced</a>
</h3>
<em>Mar 1 '01; affected top-level classes: <a href="./org/openide/util/Lookup.html"><code>Lookup</code></a> <a href="./org/openide/util/LookupEvent.html"><code>LookupEvent</code></a> <a href="./org/openide/util/LookupListener.html"><code>LookupListener</code></a>; made by: jtulach</em>
<br>
Better version of <code>Lookup</code> introduced. There is a
<code>org.openide.util.Lookup</code> with bunch of inner classes and
<code>org.openide.util.LookupListener</code> and
<code>org.openide.util.LookupEvent</code>.
<!-- AUTOMATICALLY GENERATED - DO NOT EDIT ME! --><h3>
<a name="version-1.25">Instance content simplifies creation of lookups</a>
</h3>
<em>(date unknown); API spec. version: 1.25; affected top-level classes: <a href="./org/openide/util/lookup/AbstractLookup.html"><code>AbstractLookup</code></a> <a href="./org/openide/util/lookup/InstanceContent.html"><code>InstanceContent</code></a>; made by: jtulach</em>
<br>
Added <code>AbstractLookup.Content</code> which can be passed to an
abstract lookup in its constructor and used to control the contents
easily. Also <code>InstanceLookup</code> provides the common easy
implementation.
<hr>
<p><span class="footnote">Built on September 14 2018.&nbsp;&nbsp;|&nbsp;&nbsp; Copyright &#169; 2017-2018 Apache Software Foundation. All Rights Reserved.</span></p>
</body>
</html>