<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<apichanges>
	<apidefs>
  	<apidef name="modules">Modules API</apidef>
  </apidefs>
<changes>
    <change id="PatchSuper-ctors">
        <api name="modules"/>
        <summary>Better support for constructor invocation</summary>
        <version major="7" minor="45"/>
        <date day="26" month="9" year="2014"/>
        <author login="sdedic"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible"/>
        <description>
            <p>
                Allows the generated constructor to call any constructor, signature is derived from specified
                static method parameters. See javadoc for <a href="@TOP@/org/openide/modules/ConstructorDelegate.html">@ConstructorDelegate</a>
            </p>
        </description>
        <class package="org.openide.modules" name="ConstructorDelegate"/>
        <issue number="243561"/>
    </change>
    <change id="PatchSuper">
        <api name="modules"/>
        <summary>Support for binary compatibility patches</summary>
        <version major="7" minor="44"/>
        <date day="11" month="4" year="2014"/>
        <author login="sdedic"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible"/>
        <description>
            <p>
                Special annotation <a href="@TOP@/org/openide/modules/PatchFor.html"><code>@PatchFor</code></a>
                allows to require that a class should serve as a <i>superclass</i> of some other class.
                See <a href="@TOP@/org/openide/modules/PatchFor.html">@PatchFor javadoc</a> for further 
                constraints.
            </p>
            <p>
                To support removing obsolete constructors, 
                <a href="@TOP@/org/openide/modules/ConstructorDelegate.html"><code>@ConstructorDelegate</code></a> has been
                created to mark moved initialization code. See <a href="@TOP@/org/openide/modules/ConstructorDelegate.html">@ConstructorDelegate javadoc</a>
                for more details.
            </p>
        </description>
        <class package="org.openide.modules" name="PatchFor"/>
        <class package="org.openide.modules" name="ConstructorDelegate"/>
        <issue number="243561"/>
    </change>
    <change id="javafx.lib">
        <api name="modules"/>
        <summary>JavaFX Library Wrapper</summary>
        <version major="7" minor="41"/>
        <date day="23" month="12" year="2013"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible">
        </compatibility>
        <description>
            <p>
                Most of JDK installations come with additional <em>JavaFX</em>
                JAR. Alas the location of the JAR is different on JDK7 and JDK8,
                moreover on some operating systems (think of Solaris) the
                JAR is not present at all. To hide the differences and allow
                smooth consumption of <em>JavaFX</em> APIs NetBeans provide
                following conventions.
            </p>
            <p>
                If you want to code against <em>JavaFX</em> APIs, add dependency
                on <code>org.netbeans.libs.javafx</code> library. Then you'll
                be able to compile and run while using the API.
            </p>
            <p>
                If you want to depend on presence of <em>JavaFX</em> JAR 
                inside of JDK installation structure, use:
            </p>
            <pre>OpenIDE-Module-Needs: org.openide.modules.jre.JavaFX</pre>
            <p>
                This token is made available by the module system, if the 
                <em>JavaFX</em> module is present in the JDK. Btw. the
                <code>org.netbeans.libs.javafx</code> library has such
                dependency and as a result, all modules that depend on it
                will be disabled on Solaris or on OpenJDK (if installed without
                <em>JavaFX</em>).
            </p>  
        </description>
        <issue number="237973"/>
    </change>
    <change id="find.by.cnb">
        <api name="modules"/>
        <summary>Find ModuleInfo by code name base easily</summary>
        <version major="7" minor="37"/>
        <date day="12" month="2" year="2013"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible">
        </compatibility>
        <description>
            <p>
                New <code>findCodeNameBase(String)</code> method returning
                <a href="@TOP@/org/openide/modules/ModuleInfo.html">ModuleInfo</a>
                or <code>null</code>.
            </p>
        </description>
        <class package="org.openide.modules" name="Modules"/>
        <issue number="225582"/>
    </change>
    <change id="allow.numbers">
        <api name="modules"/>
        <summary>Less restrictive check of code names of modules and OSGi bundles</summary>
        <version major="7" minor="32"/>
        <date day="24" month="5" year="2012"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible">
        </compatibility>
        <description>
            <p>
                <a href="@TOP@/org/openide/modules/Dependency.html#create-int-java.lang.String-">Dependency.create</a>
                now allows code name base where dot is followed by number
                (like <em>org.apache.servicemix.specs.jsr303_api_1.0.0</em>).
                This increases the inter-operability with OSGi bundles
                using such naming style.
            </p>
        </description>
        <class package="org.openide.modules" name="Dependency"/>
        <issue number="212364"/>
    </change>
    <change id="provide.cnb">
        <api name="modules"/>
        <summary>By default each module provides its code name base as a token</summary>
        <version major="7" minor="30"/>
        <date day="20" month="4" year="2012"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible">
            <p>
                Unless accidental clash in the name of the token with
                <code>cnb.</code> prefix, the change is compatible.
            </p>
        </compatibility>
        <description>
            <p>
                Each module provides by default a token composed from its
                code name base and fixed prefix:
                <code>"cnb." + <a href="@TOP@/org/openide/modules/ModuleInfo.html#getCodeNameBase--">getCodeNameBase()</a></code>
                from its <a href="@TOP@/org/openide/modules/ModuleInfo.html#getProvides--">getProvides()</a>
                method.
            </p>
        </description>
        <class package="org.openide.modules" name="ModuleInfo"/>
        <issue number="201695"/>
    </change>
    <change id="OnStartStop">
        <api name="modules"/>
        <summary><code>OnStart</code> and <code>OnStop</code></summary>
        <version major="7" minor="29"/>
        <date day="31" month="3" year="2012"/>
        <author login="jglick"/>
        <compatibility>
            <p>
                Modules using <a href="@TOP@/org/openide/modules/ModuleInstall.html">
                ModuleInstall</a> are encouraged to switch to
                these new annotations. 
            </p>
        </compatibility>
        <description>
            <p>
                New, more efficient way to execute code 
                <a href="@TOP@/org/openide/modules/OnStart.html">on start</a>
                and
                <a href="@TOP@/org/openide/modules/OnStop.html">on shutdown</a>
                of your module.
            </p>
        </description>
        <class package="org.openide.modules" name="OnStart"/>
        <class package="org.openide.modules" name="OnStop"/>
        <issue number="200636"/>
    </change>
    <change id="Places">
        <api name="modules"/>
        <summary>Added <code>Places</code></summary>
        <version major="7" minor="26"/>
        <date day="1" month="9" year="2011"/>
        <author login="jglick"/>
        <compatibility>
            <p>
                Modules using system properties such as <code>netbeans.user</code>
                should use this new API instead.
            </p>
        </compatibility>
        <description>
            <p>
                Introduced a structured API for accessing well-known file locations.
            </p>
        </description>
        <class package="org.openide.modules" name="Places"/>
        <issue number="57798"/>
    </change>
    <change id="Dependency.java.keywords">
        <api name="modules"/>
        <summary>Module names can contain Java keywords</summary>
        <version major="7" minor="20"/>
        <date day="22" month="7" year="2010"/>
        <author login="jtulach"/>
        <compatibility semantic="compatible" modification="yes"/>
        <description>
            <p>
                Naming rules for module code name bases are now relaxed.
                The name of a module can contain a Java keyword like 
                <code>org.mysite.import.something</code>, etc.
            </p>
        </description>
        <class package="org.openide.modules" name="Dependency"/>
        <issue number="188686"/>
    </change>
    <change id="Modules">
        <api name="modules"/>
        <summary>Quicker way to find owner of a class</summary>
        <version major="7" minor="19"/>
        <date day="19" month="7" year="2010"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Class <code>Modules</code> introduced, initially with the ability
                to find the owner of a given class directly without iterating
                through all known modules.
            </p>
        </description>
        <class package="org.openide.modules" name="Modules"/>
        <issue number="157828"/>
    </change>
    <change id="ClassLoader.findLibrary">
        <api name="modules"/>
        <summary>New native library lookup mechanism</summary>
        <version major="7" minor="17"/>
        <date day="17" month="5" year="2010"/>
        <author login="pnejedly"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                You can now distribute native libraries into architecture
                and OS specific directories under <samp>modules/lib</samp>;
                see the <a href="@TOP@/org/openide/modules/doc-files/api.html#jni">documentation</a>.
                The functionality is actually provided by the
                <code>org.netbeans.bootstrap</code> module as of version 2.33.
            </p>
        </description>
        <issue number="186000"/>
    </change>
    <change id="ModuleInstall-no-extern">
        <api name="modules"/>
        <summary>Simplified <code>ModuleInstall</code> lifecycle</summary>
        <version major="7" minor="15"/>
        <date day="6" month="1" year="2010"/>
        <author login="jglick"/>
        <compatibility deletion="yes" source="compatible" semantic="incompatible">
            <p>
                Modules relying on <code>ModuleInstall</code> externalization
                should be using <code>NbPreferences</code> (or similar) instead.
                Use <code>restored</code> rather than <code>installed</code> or
                <code>updated</code> (which have long been unreliable anyway).
            </p>
        </compatibility>
        <description>
            <p>
                The <code>ModuleInstall</code> methods <code>installed</code> and
                <code>updated</code>, while previously deprecated, will no longer
                be called at all. <code>ModuleInstall</code> instances will also
                no longer be serialized to disk. Versioning-related attributes
                are no longer stored in <code>config/Modules/*.xml</code> files.
            </p>
        </description>
        <class package="org.openide.modules" name="ModuleInstall"/>
        <issue number="113341"/>
    </change>
    <change id="InstalledFileLocator.locateAll">
        <api name="modules"/>
        <summary>Added <code>InstalledFileLocator.locateAll</code></summary>
        <version major="7" minor="15"/>
        <date day="6" month="1" year="2010"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                You can now locate multiple variants of an installed file path
                from different clusters.
            </p>
        </description>
        <class package="org.openide.modules" name="InstalledFileLocator"/>
        <issue number="36701"/>
    </change>
    <change id="DependencyIsSerializable">
        <api name="modules"/>
        <summary>Dependency class made serializable</summary>
        <version major="7" minor="10"/>
        <date day="6" month="4" year="2009"/>
        <author login="jtulach"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                <code>Dependency</code> now implements <code>Serializable</code>
            </p>
        </description>
        <class package="org.openide.modules" name="Dependency"/>
        <issue number="160390"/>
    </change>
    <change id="PatchedPublic">
        <api name="modules"/>
        <summary>Added annotation <code>@PatchedPublic</code></summary>
        <version major="7" minor="9"/>
        <date day="6" month="1" year="2009"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added <code>@PatchedPublic</code> to request that the module system
                treat binary references to a method as public even if in source is
                is not public.
            </p>
        </description>
        <class package="org.openide.modules" name="PatchedPublic"/>
        <issue number="155796"/>
    </change>
    <change id="OpenIDE-Module-Hide-Classpath-Packages">
        <api name="modules"/>
        <summary>Ability to hide JRE packages from the module classpath</summary>
        <version major="7" minor="6"/>
        <date day="23" month="2" year="2008"/>
        <author login="jglick"/>
        <compatibility semantic="incompatible">
            <p>
                To guarantee that the new tag will be honored you should also:
            </p>
            <pre>OpenIDE-Module-Requires: org.openide.modules.ModuleFormat2</pre>
            <p>
                Several JRE packages used to be hidden automatically but are not any more;
                while these were never documented, modules which relied on being able to override
                these packages could be broken by having the JRE classes exposed instead. Specifically,
                the following packages (or package prefixes) were in NetBeans 6.0 not loaded from the
                classpath, but now will be unless otherwise requested:
            </p>
            <pre>com.sun.javadoc
com.sun.source
com.sun.tools.javac
com.sun.tools.javadoc
javax.annotation
javax.jws
javax.lang.model
javax.tools
javax.xml.bind
javax.xml.soap
javax.xml.stream
javax.xml.ws</pre>
        </compatibility>
        <description>
            <p>
                Packages supplied in a module which overlap those in the JRE or its extensions will normally be ignored
                (as usual, the JRE takes precedence). Modules which wish to specifically suppress loading of some packages
                from the classpath can now request the class loader to do so by specifying:
            </p>
            <pre>OpenIDE-Module-Hide-Classpath-Packages: javax.lang.model.*, com.sun.source.**</pre>
            <p>
                (The syntax is analogous to that of <code>OpenIDE-Module-Public-Packages</code>.)
            </p>
            <p>
                Such a declaration affects not just this module, but any other modules declaring a <em>direct</em>
                dependency on it (<code>OpenIDE-Module-Module-Dependencies</code>). The module is now free to bundle
                its own versions of these classes and be sure they will be used by it and its clients.
                Be aware that as with all changes to the normal class loading scheme,
                careless usage could result in <code>LinkageError</code>s.
            </p>
        </description>
        <issue number="96711"/>
    </change>
    <change id="no-FileObject-for-module-JAR-entry">
        <api name="modules"/>
        <summary>No longer possible to obtain a module JAR entry as a <code>FileObject</code></summary>
        <version major="7" minor="5"/>
        <date day="15" month="2" year="2008"/>
        <author login="jglick"/>
        <compatibility semantic="incompatible"/>
        <description>
            <p>
                Modules used to be able to obtain their own entries as file objects, e.g.:
            </p>
            <pre>FileObject f = URLMapper.findFileObject(ThisClass.class.getResource("something.xml"));</pre>
            <p>
                This is no longer supported.
                Client code should either use module classpath entries directly as URLs;
                or register files of interest in the XML layer and refer to them using the system filesystem.
            </p>
        </description>
        <issue number="127268"/>
    </change>
    <change id="removeWritables">
        <api name="modules"/>
        <summary>An option to revert user's modifications to XML layer files</summary>
        <version major="7" minor="2"/>
        <date day="1" month="8" year="2006"/>
        <author login="saubrecht"/>
        <compatibility binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="yes" deletion="no" modification="no"/>
        <description>
            <code>FileObject</code>s created on XML layer now support a new 
            attribute <code>"removeWritables"</code> returning an instance of
            <code>Callable</code> which removes the local writable version of the
            given <code>FileObject</code> thus reverting the folder or file to
            its initial state as defined in XML layers. Please note that is *not*
            possible to reset <code>FileObject</code>'s attributes.
        </description>
    </change>
    <change id="needs">
        <api name="modules"/>
        <summary>Requires/Provides and Needs</summary>
        <version major="7" minor="1"/>
        <date day="19" month="7" year="2006"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="yes" deletion="no" modification="no"/>
        <description>
            It is possible to require some implementation using
            <code>OpenIDE-Module-Needs: token</code> which is slightly
            less restrictive than usual
            <code>OpenIDE-Module-Requires: token</code> as
            explain in the <a href="@TOP@/org/openide/modules/doc-files/api.html#7.1">documentation</a>.
        </description>
        <class package="org.openide.modules" name="Dependency"/>
    </change>
    <change id="generified">
        <api name="modules"/>
        <summary>Generified Interfaces</summary>
        <version major="7" minor="0"/>
        <date day="22" month="3" year="2006"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no" modification="no"/>
        <description>
            Rewritten to use Java5 features, especially generics.
            Affects internal code and <a href="@TOP@org/openide/modules/Dependency.html#create-int-java.lang.String-">one public signature</a>.
        </description>
        <class package="org.openide.modules" name="Dependency"/>
    </change>
    <change id="enhanced-support-for-os-specific-modules-iz-109288">
        <api name="modules"/>
        <summary>Enhanced support for OS specific modules (part II)</summary>
        <version major="7" minor="3"/>
        <date day="18" month="7" year="2007"/>
        <author login="jglick"/>
        <compatibility binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="yes" deletion="no" modification="no"/>
        <description>
            Modules can now express dependencies on
            <code>org.openide.modules.os.Linux</code> and
            <code>org.openide.modules.os.Solaris</code>.
            For more details read <a href="@TOP@/org/openide/modules/doc-files/api.html#how-os-specific">here</a>.
        </description>
        <issue number="109288"/>
    </change>
    <change id="enhanced-support-for-os-specific-modules-iz-50943">
        <api name="modules"/>
        <summary>Enhanced support for OS specific modules</summary>
        <version major="6" minor="3"/>
        <date day="7" month="7" year="2005"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="yes" deletion="no" modification="no"/>
        <description>
            Modules can now express dependency on more operating system types
            than those that were available previously. Now there is 
            <code>org.openide.modules.os.PlainUnix</code> token for all unixes
            but MacOSX and <code>org.openide.modules.os.OS2</code> for 
            OS/2. For more details read <a href="@TOP@/org/openide/modules/doc-files/api.html#how-os-specific">here</a>.
        </description>
        <issue number="50943" />
    </change>
    <change id="split-of-openide-branding-files">
        <api name="modules"/>
        <summary>Branding files used during startup have new location</summary>
        <version major="6" minor="2"/>
        <date day="7" month="6" year="2005"/>
        <author login="jtulach"/>
        <compatibility binary="compatible" source="compatible" semantic="incompatible" deprecation="no" addition="yes" deletion="no" modification="yes"/>
        <description>
            Due to <a href="apichanges.html#split-of-openide-jar">split of openide.jar</a> some important branding files used during startup change their location. 
            Especially the to splash screen picture, location and color of progress bar and the application icon are now in <code>org.netbeans.core.startup</code>
            package. Here is an example of the branding <a href="http://www.netbeans.org/source/browse/ide/branding/core/src/org/netbeans/core/startup/">as used by NetBeans IDE</a>.
        </description>
    </change>
    <change id="split-of-openide-jar">
        <api name="modules"/>
        <summary><code>openide.jar</code> is gone, update your module dependencies!</summary>
        <version major="6" minor="2"/>
        <date day="4" month="6" year="2005"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="yes" deletion="no" modification="yes"/>
        <description>
            <p>
            The monolithic <code>openide.jar</code> has been split into many small
            JAR files and most of them were made autoload modules. That means they
            are loaded only on demand, which is going to simplify end of life of parts 
            that are no longer needed.
            </p>
            
            <p>
            The layout of files on disk changed and their content as well, but these
            changes shall have no effect on classes from <code>org.openide</code>
            packages during runtime. Modules using them will run unmodified.
            Althrough there will be printed warnings about upgraded module 
            dependencies - one is adviced to use
            <b>ant fix-dependencies</b> in his projectized module to 
            modify the <code>nbproject/project.xml</code>. The 
            manifest's <code>OpenIDE-Module-IDE-Dependencies</code>
            attribute is deprecated and shall no longer be used. Enumerate the 
            individual split submodules instead, as is done by the <b>fix-dependencies</b> 
            task. Moreover one can depend on <code>
OpenIDE-Module-Requires: org.openide.modules.ModuleFormat1</code>
            to express that it requires current format of module manifests -
            this tag is automatically inserted when running in projectized system.
            </p>
            
            <p>
            The current layout of platform cluster directory is:
            </p>
            <ul class="doing">
                <li><code>lib/boot.jar</code> contains what it used to have
                together with module system runtime <q>independent of other NetBeans APIs</q>.
                </li>

                <li><code>lib/org-openide-util.jar</code> is next to boot.jar to provide
                the basic infrastructure used by boot.jar.
                </li>

                <li><code>lib/org-openide-modules.jar</code> provides the APIs that the
                boot.jar implements.
                </li>

                <li><code>core/core.jar</code> is loaded dynamically
                by the boot.jar and contains most of the startup code and the
                <q>NetBeans dependent</q> part of module system. 
                 For its implementation it needs
                filesystems which are along as well.
                </li>

                <li><code>core/org-openide-filesystems.jar</code> the filesystems API is needed
                for the standard launch code to read module config files and listen to changes in their
                amount or content.
                </li>

                <li><code>modules/org-openide-nodes.jar</code> and other openide libraries
                are now turned into real modules.
                </li>


                <li><code>modules/org-netbeans-core.jar</code> is also a module
                and contains the rest of original core.jar. It is likely that this one is going
                to be split even more, as the UI could be separated to core/ui, etc. 
                </li>
            </ul>
        
        </description>
        <issue number="58258"/>
    </change>
  
  
  
    <change id="FriendModulesRestriction">
        <api name="modules"/>
        <summary>Friend Modules</summary>
        <version major="6" minor="1"/>
        <date day="11" month="4" year="2005"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            A module can now <a href="@TOP@org/openide/modules/doc-files/api.html#friend">restrict the list</a> of modules that can
            access its public packages, by enumerating their code names 
            in manifest.
        </description>
        <issue number="54123"/>
  </change>
  
  <change id="no-compat-manifest-section">
      <api name="modules"/>
      <summary>Removed compatibility handling of deprecated manifest sections</summary>
      <version major="4" minor="48"/>
      <date day="7" month="5" year="2004"/>
      <author login="jglick"/>
      <compatibility semantic="incompatible" binary="compatible" source="compatible" deprecation="no" addition="no" deletion="no" modification="no">
        <p>
          Modules which did not remove these manifest sections before must do so
          for NetBeans 4.0.
        </p>
      </compatibility>
      <description>
        <p>
          Previously, a number of module manifest sections (e.g.
          <code>OpenIDE-Module-Class: FileSystem</code>) had been deprecated
          in favor of XML-layer-based installation, but a compatibility layer was
          left in place to permit old modules to still function as before. This
          layer has been removed.
        </p>
        <p>
          Manifest-based installation of JavaHelp help sets was also removed.
        </p>
      </description>
  </change>
  <change id="org.openide.modules.os">
        <api name="modules"/>
        <summary>Allow a module to be run only on some class of operating systems</summary>
        <version major="4" minor="44"/>
        <date day="11" month="8" year="2004"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            Modules can now declare that they run only on a specific version of
            operating system by requesting a presence of 
            <code>org.openide.modules.os.MacOSX</code>,
            <code>org.openide.modules.os.Unix</code> or 
            <code>org.openide.modules.os.Windows</code> 
            token in their manifest:
            <pre xml:space="preserve">
                OpenIDE-Module-Requires: org.openide.modules.os.Unix
            </pre>
            Such a module will then be enabled only on specified class of 
            operating systems. See also the 
            	<a href="org/openide/modules/doc-files/api.html#how-os-specific">modules api</a>
            description.
        </description>
        <issue number="46833"/>
  </change>
  <change>
        <api name="modules"/>
        <summary>Added ModuleInfo.getBuildVersion()</summary>
        <version major="4" minor="18"/>
        <date day="18" month="12" year="2003"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            The implementation version and the build number of modules can
            now be different. One can keep 
            <code>OpenIDE-Module-Implementation-Version</code> unchanged
            to allow implementation dependencies and still identify the
            actual build version by specifying 
            <code>OpenIDE-Module-Build-Version</code>. If omited the 
            build version is equal to implementation version.
        </description>
        <class package="org.openide.modules" name="ModuleInfo"/>
        <issue number="36064"/>
  </change>
  <change>
        <api name="modules"/>
        <summary>Module dependencies no longer considered transitive for purposes of classloading</summary>
        <version major="3" minor="12"/>
        <date day="7" month="10" year="2002"/>
        <author login="jglick"/>
        <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no">
            Modules which fail to declare an API dependency on <samp>IDE/1 &gt; 3.12</samp>
            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.
        </compatibility>
        <description>
            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 <em>explicit</em> dependency on A.
        </description>
        <issue number="27853"/>
  </change>
  <change>
        <api name="modules"/>
        <summary>Possible to deprecate an entire module</summary>
        <version major="3" minor="15"/>
        <date day="16" month="10" year="2002"/>
        <author login="jglick"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            The new manifest attribute <code>OpenIDE-Module-Deprecated</code>
            and localized attribute <code>OpenIDE-Module-Deprecation-Message</code>
            may be used to warn clients of an obsolete API module.
        </description>
  </change>
  <change id="issue-19443-1">
      <summary>API separation, phase I</summary>
      <version major="3" minor="14"/>
      <date day="15" month="10" year="2002"/>
      <author login="jglick"/>
      <compatibility binary="compatible" source="incompatible" deprecation="yes" semantic="compatible" addition="no" deletion="no" modification="no">
        <p>
          The deprecated classes continue to be available in the module
          <code>org.openide.deprecated</code> which you may depend on it you
          cannot remove uses of the deprecated APIs. In order for
          <code>TopManager.getDefault()</code> to work, you must also require the
          token <code>org.openide.TopManager</code>, 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.
        </p>
        <p>
          Similarly, the Java Hierarchy API was moved to the module
          <code>org.openide.src</code> which you should depend on in order to use
          this API.
        </p>
        <p>
          For compatibility, the above three dependencies are added to your module
          <em>automatically</em> 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.
        </p>
      </compatibility>
      <description>
        <p>
          Many classes were moved to a separate module,
          <samp>openide-deprecated.jar</samp>, not available to modules by
          default. Uses of these classes in modules should be cleaned up whenever
          possible.
        </p>
        <p>
          Additionally, the entire contents of <code>org.openide.src.*</code> and
          <code>org.openide.src.nodes.*</code>, as well as
          <code>org.openide.cookies.SourceCookie</code> and some associated
          property editors, were moved to a separate module.
        </p>
        <p>
          The most common apparent symptom for module authors will be the absence
          of <code>TopManager</code>. Most methods in this class have been
          replaced by newer utility classes in a straightforward manner. See the
          Upgrade Guide.
        </p>
      </description>
      <issue number="19443"/>
      <issue number="20898"/>
  </change>
  <change id="issue-19443-2">
      <summary>API separation, phase II</summary>
      <version major="3" minor="17"/>
      <date day="1" month="11" year="2002"/>
      <author login="jglick"/>
      <compatibility binary="compatible" source="incompatible" modification="yes" semantic="compatible" deprecation="no" addition="no" deletion="no">
        <p>
          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.
        </p>
        <p>
          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:
        </p>
        <pre xml:space="preserve">
OpenIDE-Module-Module-Dependencies: org.openide.compiler &gt; 1.0,
  org.openide.execution &gt; 1.0, org.openide.io &gt; 1.0
OpenIDE-Module-Requires: org.openide.compiler.CompilationEngine,
  org.openide.execution.ExecutionEngine, org.openide.windows.IOProvider
        </pre>
        <p>
          And any package dependencies from old modules on
          <code>org.netbeans.lib.terminalemulator</code> will be converted to
          module dependencies.
        </p>
      </compatibility>
      <description>
        <p>
          Three sections of the Open APIs were split into new autoload modules.
        </p>
        <ul>
          <li>
            <p>
              The module <code>org.openide.compiler</code> (version 1.0) contains
              the Compiler API and some other classes directly related to it.
            </p>
          </li>
          <li>
            <p>
              The module <code>org.openide.execution</code> (version 1.0) contains
              the Execution API and some other classes directly related to it.
            </p>
          </li>
          <li>
            <p>
              The module <code>org.openide.io</code> (version 1.0) contains
              <code>InputOutput</code> and related classes (formerly part of the
              Window System API, and still physically in the
              <code>org.openide.windows</code> package).
            </p>
          </li>
        </ul>
        <p>
          New modules wishing to use these APIs must declare regular module
          dependencies on them. Future changes in these APIs will be documented
          separately.
        </p>
        <p>
          Furthermore, modules wishing to use certain services must
          <code>OpenIDE-Module-Require</code> them if appropriate:
        </p>
        <ul>
          <li>
            <p>
              <code>org.openide.compiler.CompilationEngine</code>, in order to
              call <code>CompilationEngine.getDefault()</code>, or safely use
              <code>AbstractCompileAction</code> or one of its subclasses, or
              call <code>CompilerJob.start()</code>, or use
              <code>BeanInfo</code>s for Compiler API classes, etc.
            </p>
          </li>
          <li>
            <p>
              <code>org.openide.execution.ExecutionEngine</code>, in order to
              call <code>ExecutionEngine.getDefault()</code>, or safely use
              <code>ExecuteAction</code>, or call
              <code>Executor.execute(...)</code>, or use <code>BeanInfo</code>s
              for Execution API classes, etc.
            </p>
          </li>
          <li>
            <p>
              <code>org.openide.windows.IOProvider</code>, in order to call
              <code>IOProvider.getDefault()</code>.
            </p>
          </li>
        </ul>
        <p>
          Other minor changes:
        </p>
        <ul>
          <li>
            <p>
              Registration of URL stream handler factories using
              <code>NbfsStreamHandlerFactory.register(...)</code> is deprecated.
              Simply create an instance of <code>URLStreamHandlerFactory</code>
              and add it to Lookup instead.
            </p>
          </li>
          <li>
            <p>
              The method <code>FileUtil.nbfsURLStreamHandler</code> was added,
              but is not intended for use by modules.
            </p>
          </li>
          <li>
            <p>
              All uses of <code>ExecInfo</code> are deprecated as they abuse the
              distinction between Filesystems and the user classpath. Use and
              override only <code>Executor.execute(DataObject)</code>. Similarly,
              <code>ThreadExecutor</code> is deprecated for the time being
              because it suffers from similar problems.
            </p>
          </li>
          <li>
            <p>
              Direct use of <code>NbfsURLConnection</code> is deprecated in favor
              of the more general <code>URLMapper</code> from the Filesystems
              API.
            </p>
          </li>
          <li>
            <p>
              Package dependencies on
              <code>org.netbeans.lib.terminalemulator</code> must be replaced
              with module dependencies on a new autoload module
              <code>org.netbeans.lib.terminalemulator</code> (version 1.0).
            </p>
          </li>
          <li>
            <p>
              Several static convenience methods have been added to
              <code>AbstractCompileAction</code>. Of most interest is
              <code>prepareJobFor</code>. Module code should no longer assume
              that <code>DataFolder</code> has a <code>CompilerCookie</code>
              which recursively compiles the folder and subfolders (according to
              depth); while it is still true, for reasons of compatibility, new
              code should use <code>prepareJobFor</code> to create a compiler job
              from a folder.
            </p>
          </li>
        </ul>
      </description>
      <issue number="19443"/>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Added <code>InstalledFileLocator</code></summary>
      <version major="3" minor="21"/>
      <date day="13" month="11" year="2002"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no">
        Existing module code which searches system properties such as
        <code>netbeans.home</code> and <code>netbeans.user</code> should be
        replaced with calls to the new supported API.
      </compatibility>
      <description>
        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.
      </description>
      <class package="org.openide.modules" name="InstalledFileLocator"/>
      <issue number="28683"/>
  </change>
  
  <change id="ModuleInfo.getClassLoader">
      <api name="modules"/>
      <summary>Added method <code>ModuleInfo.getClassLoader()</code></summary>
      <version major="4" minor="21"/>
      <date day="25" month="12" year="2003"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no">
        Note that although the new method is effectively abstract, this is a
        compatible change insofar as no one outside of the core module system
        should be subclassing <code>ModuleInfo</code>.
      </compatibility>
      <description>
        Added a new method <code>ModuleInfo.getClassLoader()</code> making it
        possible to find a Java class loader associated with an enabled module.
      </description>
      <class package="org.openide.modules" name="ModuleInfo"/>
      <issue number="38330"/>
  </change>
  
  <change>
      <api name="modules"/>
      <summary><code>Thread.contextClassLoader</code> defaults to <code>TopManager.systemClassLoader</code></summary>
      <date day="8" month="5" year="2002"/>
      <author login="jglick"/>
      <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
      <description>
        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.
      </description>
      <issue number="20663"/>
      <branch name="sierra">
        <date day="25" month="7" year="2002"/>
        <version major="1" minor="43" subminor="3" subsubminor="1"/>
      </branch>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Modules can declare their public packages</summary>
      <version major="2" minor="19"/>
      <date day="16" month="5" year="2002"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <p>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.</p>
        <p>Utilizing this feature for already released modules
        is <b>very dangerous</b>. See issue
        <a href="http://www.netbeans.org/issues/show_bug.cgi?id=31637">#31637</a>
        for details.</p>
      </description>
      <issue number="19621"/>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Provides-requires semantics for module dependencies</summary>
      <version major="2" minor="3"/>
      <date day="29" month="1" year="2002"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        The manifest attributes <code>OpenIDE-Module-Provides</code> and
        <code>OpenIDE-Module-Requires</code> were introduced. These permit
        modules to depend on capabilities offered by other modules, without
        explicitly naming who the provider will be.
      </description>
      <class package="org.openide.modules" name="Dependency"/>
      <class package="org.openide.modules" name="ModuleInfo"/>
      <issue number="18781"/>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Ranged major release version dependencies</summary>
      <version major="2" minor="3"/>
      <date day="29" month="1" year="2002"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        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.
      </description>
      <class package="org.openide.modules" name="Dependency"/>
      <issue number="19714"/>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Can supply localized messages for failed dependencies</summary>
      <version major="1" minor="26"/>
      <date day="20" month="7" year="2001"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Permitting main attributes
        <code>OpenIDE-Module-Module-Dependency-Message</code> and
        <code>OpenIDE-Module-Package-Dependency-Message</code>.
      </description>
      <class package="org.openide.modules" name="ModuleInfo"/>
  </change>
  
  <change id="ModuleInfo.owns">
      <api name="modules"/>
      <summary>Can determine which module owns a given class</summary>
      <version major="1" minor="28"/>
      <date day="31" month="7" year="2001"/>
      <author login="jpokorsky"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added <code>owns(Class)</code> to determine if the provided class was
        loaded as a part of the module.
      </description>
      <class package="org.openide.modules" name="ModuleInfo"/>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>New module installer API</summary>
      <version major="1" minor="24"/>
      <date day="16" month="7" year="2001"/>
      <author login="jglick"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
      <description>
        New module installer and corresponding API enhancements.
        <code>ModuleDescription</code>, <code>ManifestSection</code>, and
        <code>IllegalModuleException</code> deprecated. <code>ModuleInfo</code>,
        <code>Dependency</code>, <code>SpecificationVersion</code>, and
        <code>ModuleInstall.validate</code> added. Module information available
        from lookup. Localized properties may be stored in bundles.
      </description>
      <class package="org.openide.modules" name="ModuleInfo"/>
      <class package="org.openide.modules" name="Dependency"/>
      <class package="org.openide.modules" name="SpecificationVersion"/>
      <class package="org.openide.modules" name="ModuleInstall"/>
  </change>
  
  <change id="system-Modules-folder">
      <api name="modules"/>
      <summary>Format of modules XML folder defined</summary>
      <version major="1" minor="31"/>
      <date day="17" month="8" year="2001"/>
      <author login="jglick"/>
      <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
      <description>
        Some aspects of the contents of the system <samp>Modules/</samp> folder
        and its XML files are now defined. Additionally, certain kinds of changes
        (module enablement or disablement) are now permitted to these XML files.
      </description>
      <issue number="13921"/>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>JavaHelp may be registered via layer</summary>
      <version major="1" minor="6"/>
      <date day="29" month="4" year="2001"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added ability to specify JavaHelp help sets and links from layer, or
        generally XML file.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>JavaHelp split into a separate module</summary>
      <version major="2" minor="2"/>
      <date day="22" month="1" year="2002"/>
      <author login="jglick"/>
      <compatibility modification="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no">
        <p>
          Existing modules (with an API dependency earlier than 2.2, or none at
          all) for compatibility are given an automatic dependency on the
          <code>org.netbeans.api.javahelp.Help</code> token. Additionally, if
          they declared a package dependency on <code>javax.help.**</code>, they
          are given an automatic dependency on the
          <code>org.netbeans.modules.javahelp/1</code> module.
        </p>
        <p>
          (<strong>Note:</strong> 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.)
        </p>
        <p>
          Both layer- and manifest-based installation of help sets continue to be
          supported; manifest-based installation is still deprecated.
        </p>
      </compatibility>
      <description>
        <p>
          JavaHelp support is now in a separate module,
          <code>org.netbeans.modules.javahelp/1</code>. This module includes the
          <code>javax.help.**</code> packages, and it provides the token
          <code>org.netbeans.api.javahelp.Help</code> which signifies the ability
          to display help, for example using <code>TopManager.showHelp</code>, or
          by querying Lookup for an instance of <code>Help</code>.
        </p>
        <p>
          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 <code>org.netbeans.api.javahelp.Help</code>. New
          modules wishing to display help can either require this token and use
          <code>TopManager.showHelp</code>, or depend on the
          <code>org.netbeans.modules.javahelp/1</code> API module, require the
          token, query Lookup for an instance of <code>Help</code>, and use its
          methods directly. New modules wishing to use the
          <code>javax.help.**</code> packages directly should declare a
          dependency on the <code>org.netbeans.modules.javahelp/1</code> module
          rather than using a package dependency.
        </p>
      </description>
      <issue number="19620"/>
      <issue number="27776"/>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Added long description for modules</summary>
      <date day="9" month="2" year="2001"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added <code>getLongDescription</code> and
        <code>TAG_LONG_DESCRIPTION</code>.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Can get JavaHelp help set reference as resource rather than URL</summary>
      <date day="22" month="1" year="2001"/>
      <author login="jglick"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
      <description>
        Added <code>getDescriptionResource</code>. Retrieving as URL deprecated.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Display category for modules</summary>
      <date day="18" month="1" year="2001"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added <code>getDisplayCategory</code> and <code>TAG_CATEGORY</code>.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Modules can declare their own dependency transformations</summary>
      <version major="3" minor="33"/>
      <date day="27" month="1" year="2003"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <p>
          Modules may now declare their own transformations of module
          dependencies using a declarative XML syntax in the folder
          <samp>ModuleAutoDeps/</samp> in the system filesystem. This is useful
          for being able to manage major refactorings of functionality in a
          manner that will retain binary compatibility.
        </p>
      </description>
      <issue number="30161"/>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Short description for modules</summary>
      <date day="21" month="12" year="2000"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added <code>getShortDescription</code> and
        <code>TAG_SHORT_DESCRIPTION</code>.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Get layer as a resource, not URL</summary>
      <date day="23" month="11" year="2000"/>
      <author login="jglick"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no"/>
      <description>
        <code>getLayerResource()</code> added. Thus all locale variants of a layer
        may be merged together. Retrieval as URL is deprecated.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Package-accessible classloader</summary>
      <date day="12" month="11" year="2000"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Inner interface <code>PackageAccessibleClassLoader</code> added to make it
        easier to check package dependencies. Package dependencies which include
        sample classes are now permitted.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Permit abbreviated sample class names in package dependencies</summary>
      <date day="22" month="11" year="2000"/>
      <author login="jglick"/>
      <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
      <description>
        Slight extension to package dependency syntax to allow abbreviated sample
        name.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Support layer specification in a module manifest</summary>
      <date day="2" month="11" year="2000"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Now also understands <code>OpenIDE-Module-Layer</code> tag that can specify
        a resource path to XMLFileSystem that is provided by the module. Also
        added method <code>getLayer()</code> that returns the URL of XML
        filesystem if provided.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary><code>ModuleDescription</code> constructor may specify a classloader</summary>
      <date day="28" month="3" year="2000"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Constructors may now specify a classloader to use rather than setting it
        later.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Manipulation of classloader used by a module</summary>
      <date day="27" month="8" year="2000"/>
      <author login="jglick"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added methods <code>getClassLoader</code>, <code>setClassLoader</code> and
        <code>getBadClasses</code>.
      </description>
  </change>
  
  <change>
      <api name="modules"/>
      <summary>Can get the class implementing a manifest section</summary>
      <date day="8" month="3" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added method <code>getSectionClass()</code>.
      </description>
  </change>
</changes>

  <htmlcontents>
    <head>
      <title>Change History for the Modules API</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>

<p class="overviewlink"><a href="overview-summary.html">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>

<!-- The actual lists of changes, as summaries and details: -->

      <hr/><standard-changelists module-code-name="org.openide.modules"/>
      
      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>

  
</apichanges>
