<?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.

-->

<?xml-stylesheet href="../../nbbuild/javadoctools/apichanges.xsl" type="text/xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<!-- INFO FOR PEOPLE ADDING CHANGES:
[most of contents snipped - see openide's apichanges for how-to instructions]
<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>
-->

<apichanges>

<!-- First, a list of API names you may use: -->
<apidefs>
        <apidef name="classpath">Classpath API</apidef>
        <apidef name="queries">Java-related queries</apidef>
</apidefs>

<!-- ACTUAL CHANGES BEGIN HERE: -->

<changes>
        <change id="ModulePathsConstants">
            <api name="queries"/>
            <summary>Added constants for module paths into the <code>JavaClassPathConstants</code></summary>
            <version major="1" minor="64"/>
            <date day="4" month="10" year="2016"/>
            <author login="tzezula"/>
            <compatibility semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added constants for module paths into the <code>JavaClassPathConstants</code>.
                </p>
            </description>
            <class package="org.netbeans.api.java.classpath" name="JavaClassPathConstants"/>
        </change>
        <change id="AccessibilityQueryImplementation2">
            <api name="queries"/>
            <summary>Added <code>AccessibilityQueryImplementation2</code> to allow to listen on package accessibility changes</summary>
            <version major="1" minor="64"/>
            <date day="4" month="10" year="2016"/>
            <author login="tzezula"/>
            <compatibility semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added <code>AccessibilityQueryImplementation2</code> interface and <code>AccessibilityQuery.isPubliclyAccessible2</code> method
                    to allow to listen on package accessibility changes.
                </p>
            </description>
            <class package="org.netbeans.api.java.queries" name="AccessibilityQuery"/>
            <class package="org.netbeans.spi.java.queries" name="AccessibilityQueryImplementation2"/>
        </change>
        <change id="CompilerOptionsQuery">
            <api name="queries"/>
            <summary>Added <code>CompilerOptionsQuery</code> for additional compiler options</summary>
            <version major="1" minor="64"/>
            <date day="4" month="10" year="2016"/>
            <author login="tzezula"/>
            <compatibility semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added <code>CompilerOptionsQuery</code> for passing additional compiler options
                    to java infrastructure.
                </p>
            </description>
            <class package="org.netbeans.api.java.queries" name="CompilerOptionsQuery"/>
            <class package="org.netbeans.spi.java.queries" name="CompilerOptionsQueryImplementation"/>
        </change>
        
        <change id="SourceLevelQuery-MINIMAL_SOURCE_LEVEL">
            <api name="queries"/>
            <summary>Added <code>MINIMAL_SOURCE_LEVEL</code> into <code>SourceLevelQuery</code></summary>
            <version major="1" minor="60"/>
            <date day="15" month="6" year="2015"/>
            <author login="tzezula"/>
            <compatibility semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added the <code>MINIMAL_SOURCE_LEVEL</code> constant into the <code>SourceLevelQuery</code>
                    specifying the minimal supported source level.
                </p>
            </description>
            <class package="org.netbeans.api.java.queries" name="SourceLevelQuery"/>
        </change>
        <change id="SourceJavadocAttacherImplementation-Definer">
            <api name="queries"/>
            <summary>Added extension to the default SourceJavadocAttacherImplementation</summary>
            <version major="1" minor="47"/>
            <date day="22" month="7" year="2013"/>
            <author login="tzezula"/>
            <compatibility semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added <code>SourceJavadocAttacherImplementation.Definer</code> interface
                    allowing extending the default SourceJavadocAttacherImplementation.
                    Such an extension can download or locate the sources and javadoc for
                    given binary.
                </p>
            </description>
            <issue number="215971"/>
        </change>
        <change id="JDK8-profiles-2">
            <api name="queries"/>
            <summary>The <code>SourceLevelQuery</code> supports JDK 8 profiles</summary>
            <version major="1" minor="47"/>
            <date day="10" month="4" year="2013"/>
            <author login="tzezula"/>
            <compatibility semantic="compatible" source="incompatible" binary="incompatible">
                Incompatible change of not released API.
            </compatibility>
            <description>
                <p>
                    The JDK Profile was changed to enum type.
                </p>
            </description>
            <issue number="228278"/>
        </change>
        <change id="JDK8-profiles">
            <api name="queries"/>
            <summary>The <code>SourceLevelQuery</code> supports JDK 8 profiles</summary>
            <version major="1" minor="45"/>
            <date day="5" month="3" year="2013"/>
            <author login="tzezula"/>
            <compatibility semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    The JDK 8 provides three limited profiles (compact1, compact2, compact3) in addition
                    to the full JDK. Each profile specifies a specific set of Java API packages and
                    contains all of the APIs of the smaller profile. The new API allows a client of the
                    <code>SourceLevelQuery</code> to query the required profile.
                </p>
            </description>
            <issue number="226657"/>
        </change>
        <change id="source-level-synonyms">
            <api name="queries"/>
            <summary>The <code>SourceLevelQuery</code> supports source level synonyms</summary>
            <version major="1" minor="40"/>
            <date day="7" month="6" year="2012"/>
            <author login="tzezula"/>
            <compatibility semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    The semantics of the <code>SourceLevelQuery</code>, <code>SourceLevelQueryImplementation</code>
                    and <code>SourceLevelQueryImplementation2</code> was extended to support source level synonyms.
                    The <code>SourceLevelQueryImplementation</code> and <code>SourceLevelQueryImplementation2</code>
                    can return source level synonyms, e.g. "5" for "1.5". These synonyms are always normalized
                    by the <code>SourceLevelQuery</code> before they are teturned to an API client.
                </p>
            </description>
            <issue number="202329"/>
        </change>
        <change id="java-classpath-compile-only">
            <api name="classpath"/>
            <summary>Introducing JavaClassPathConstants.COMPILE_ONLY</summary>
            <version major="1" minor="39"/>
            <date day="23" month="5" year="2012"/>
            <author login="tzezula"/>
            <compatibility addition="yes" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added a new <code>COMPILE_ONLY</code> classpath type allowing project types to add
                    classpath resources which should be included in the complile classpath but should not
                    be inherited by runtime classpath.
                </p>
            </description>
            <class package="org.netbeans.api.java.classpath" name="JavaClassPathConstants" />
            <issue number="207717"/>
        </change>
        <change id="source-javadoc-attacher">
            <api name="queries"/>
            <summary>Added SourceJavadocAttacher to allow clients to attach source (javadoc) roots to binary root</summary>
            <version major="1" minor="35"/>
            <date day="11" month="8" year="2011"/>
            <author login="tzezula"/>
            <compatibility addition="yes" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added an API to allow clients to attach source roots and javadoc roots to binary roots.
                    The API delegates to SPI implementations which provide specific behavior depending on
                    type of binary root (platform, library, maven artifact). There is also fallback implementation
                    handling unknown binary roots by storing the bindings into IDE's userdir.
                </p>
            </description>
            <class package="org.netbeans.api.java.queries" name="SourceJavadocAttacher" />
            <class package="org.netbeans.spi.java.queries" name="SourceJavadocAttacherImplementation" />
            <issue number="200698"/>
        </change>
        <change id="source-level-changes">
            <api name="queries"/>
            <summary>Added notifications about source level changes into SourceLevelQuery</summary>
            <version major="1" minor="30"/>
            <date day="8" month="7" year="2010"/>
            <author login="tzezula"/>
            <compatibility addition="yes" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    The SourceLevelQuery did not allow listening on the source level changes. Such a
                    notifications are required by the annotation processor support and indexing.
                    This API change adds a SourceLevelQuery.getSourceLevel2 which returns a Result object
                    which allows listening like other queries.
                </p>
            </description>
            <class package="org.netbeans.api.java.queries" name="SourceLevelQuery" />
            <class package="org.netbeans.spi.java.queries" name="SourceLevelQueryImplementation2" />
            <issue number="185031"/>
        </change>
        <change id="ap-query-triggers">
            <api name="classpath"/>
            <summary>Introducing AnnotationProcessingQuery.Result.Trigger</summary>
            <version major="1" minor="28"/>
            <date day="15" month="4" year="2010"/>
            <author login="dbalek"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>Modifying AnnotationProcessingQuery.Result.annotationProcessingEnabled() to return a set of triggers on which the annotation processors should be run.
                </p>
            </description>
            <class package="org.netbeans.api.java.queries" name="AnnotationProcessingQuery" />
            <issue number="183793"/>
        </change>
        <change id="ap-query-processoroptions">
            <api name="classpath"/>
            <summary>Introducing AnnotationProcessingQuery.Result.processorOptions</summary>
            <version major="1" minor="26"/>
            <date day="4" month="3" year="2010"/>
            <author login="dbalek"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>Adding AnnotationProcessingQuery.Result.processorOptions() to return options passed to annotation processors (-Akey=value).
                </p>
            </description>
            <class package="org.netbeans.api.java.queries" name="AnnotationProcessingQuery" />
            <issue number="181421"/>
        </change>
        <change id="ap-query">
            <api name="classpath"/>
            <summary>Introducing AnnotationProcessingQuery</summary>
            <version major="1" minor="25"/>
            <date day="27" month="1" year="2010"/>
            <author login="jlahoda"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>Adding AnnotationProcessingQuery return annotation processing options for a given file/folder.
                </p>
            </description>
            <class package="org.netbeans.api.java.queries" name="AnnotationProcessingQuery" />
            <class package="org.netbeans.spi.java.queries" name="AnnotationProcessingQueryImplementation" />
            <issue number="179749"/>
        </change>
        <change id="java-classpath-processorpath">
            <api name="classpath"/>
            <summary>Introducing JavaClassPathConstants.PROCESSOR_PATH</summary>
            <version major="1" minor="22"/>
            <date day="18" month="10" year="2009"/>
            <author login="jlahoda"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Class org.netbeans.api.java.classpath.JavaClassPathConstants is created to hold java specific classpath constants.
                    org.netbeans.api.java.classpath.JavaClassPathConstants.PROCESSOR_PATH constant is created as a key
                    for Java processor path.
                </p>
            </description>
            <class package="org.netbeans.api.java.classpath" name="JavaClassPathConstants" />
            <issue number="174202"/>
        </change>
        <change id="classpath-api-module">
            <api name="classpath"/>
            <summary>Splitting the java API to independent ClassPath API and the rest of the java API</summary>
            <version major="1" minor="18"/>
            <date day="5" month="6" year="2008"/>
            <author login="tzezula"/>
            <compatibility addition="no" modification="no" semantic="compatible" source="incompatible" binary="compatible"/>
            <description>
                <p>
                    The copy of the ClassPath API was used by generic scripting framework, which cannot depend on the java cluster.
                    To remove this copy of the ClassPath API the java API needs to be splitted into the ClassPath API (IDE cluster)
                    and the rest of the java API (java cluster).
                </p>
            </description>
            <issue number="136169"/>
        </change>
        <change id="ClassPath.string">
            <api name="classpath"/>
            <summary>Interconversions with string-format classpaths</summary>
            <version major="1" minor="15"/>
            <date day="17" month="3" year="2008"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code>ClassPath.toString(PathConversionMode)</code> and
                    <code>ClassPathSupport.createClassPath(String)</code>
                    can be used to easily convert between traditional string classpaths
                    and NetBeans' internal representation.
                </p>
            </description>
            <!-- <class package="org.netbeans.api.java.classpath" name="ClassPath"/>
            <class package="org.netbeans.spi.java.classpath.support" name="ClassPathSupport"/> -->
            <issue number="59311"/>
        </change>
        <change id="queries-spi-support">
            <api name="queries"/>
            <summary>Support for delegating SourceForBinaryQueryImplementation2</summary>
            <version major="1" minor="16"/>
            <date day="13" month="3" year="2008"/>
            <author login="tzezula"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added support base class for SourceForBinaryQueryImplementation2 which delegates to other SourceForBinaryQueryImplementations.
                </p>
            </description>
            <!-- <class package="org.netbeans.spi.java.queries.support" name="SourceForBinaryQueryImpl2Base"/> -->
            <issue number="129884"/>
        </change>
        <change id="source-for-binary-query2">
            <api name="queries"/>
            <summary>Support for passing hint to the java infrastructure whether it should prefer source or binary</summary>
            <version major="1" minor="15"/>
            <date day="10" month="3" year="2008"/>
            <author login="tzezula"/>
            <compatibility addition="yes" modification="yes" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    It is possible for the SouceForBinaryQuery provider to specify whether the java module should prefer
                    sources or binaries. In general sources should be preferred for projects where user can make modification.
                    The binaries should be preferred for libraries and platforms where sources may not be complete or correct.
                </p>
            </description>
            <!-- <class package="org.netbeans.api.java.queries" name="SourceForBinaryQuery"/>
            <class package="org.netbeans.spi.java.queries" name="SourceForBinaryQueryImplementation2"/> -->
            <issue number="128695"/>
        </change>
        <change id="includes-excludes.classpath">
            <api name="classpath"/>
            <summary>Support for specifying classpath inclusion</summary>
            <version major="1" minor="13"/>
            <date day="1" month="3" year="2007"/>
            <author login="jglick"/>
            <compatibility addition="yes" modification="yes" semantic="incompatible" source="compatible" binary="compatible">
                <p>
                    It is possible for clients of existing <code>ClassPath</code> methods to have made
                    assumptions about their behavior that are no longer true.
                </p>
            </compatibility>
            <description>
                <p>
                    Classpath implementations can now specify which files and folders/packages to include
                    or exclude. (This could be used for binary classpaths such as <code>COMPILE</code> but
                    currently only excludes on <code>SOURCE</code> paths are honored by Java language features.)
                </p>
            </description>
            <!-- <class package="org.netbeans.api.java.classpath" name="ClassPath"/>
            <class package="org.netbeans.spi.java.classpath" name="FilteringPathResourceImplementation"/> -->
            <issue number="49026"/>
        </change>

        <change id="BinaryForSourceQuery">
            <api name="queries"/>
            <summary>BinaryForSourceQuery returns folder(s) containing binaries for source rooot</summary>
            <version major="1" minor="12"/>
            <date day="8" month="2" year="2007"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                The new API BinaryForSourceQuery was added to allow clients to find out the output (class files)
                corresponding to source root. The query uses instances of a SPI interface BinaryForSourceQueryImplementation
                registered in the system lookup to find out the binaries. When no binary is found it uses the default algorithm
                (SFBQ.findSources(ClassPath.EXECUTE) == sourceRoot)
                </p>
            </description>
            <!-- <class package="org.netbeans.api.java.queries" name="BinaryForSourceQuery"/>
            <class package="org.netbeans.spi.java.queries" name="BinaryForSourceQueryImplementation"/> -->
        </change>
        <change id="UnitTestForSourceQuery.multiple">
            <api name="queries"/>
            <summary>UnitTestForSourceQuery supports multiple source and test roots</summary>
            <version major="1" minor="7"/>
            <date day="8" month="11" year="2004"/>
            <author login="tzezula"/>
            <compatibility addition="yes" deprecation="yes">
                Compatibility with the old API and SPI is provided.
                Both versions of SPI interfaces are used by the API; a project type may still implement the
                deprecated <code>UnitTestForSourceQueryImplementation</code> rather than
                <code>MultipleRootsUnitTestForSourceQueryImplementation</code>.
            </compatibility>
            <description>
                <p>
                Added two static methods, <code>findSources(FileObject)</code> and <code>findUnitTests(FileObject)</code>,
                into <code>UnitTestForSourceQuery</code>. Added a new SPI interface
                <code>MultipleRootsUnitTestForSourceQueryImplementation</code> which allows to a project type to return
                more than one source/test root.
                The change was required to allow support of multiple source and test roots.
                </p>
            </description>
            <!-- <class package="org.netbeans.api.java.queries" name="UnitTestForSourceQuery"/>
            <class package="org.netbeans.spi.java.queries" name="UnitTestForSourceQueryImplementation"/>
            <class package="org.netbeans.spi.java.queries" name="MultipleRootsUnitTestForSourceQueryImplementation"/> -->
        </change>

        <change>
            <api name="queries"/>
            <summary>Added SourceLevelQuery</summary>
            <version major="1" minor="5"/>
            <date day="27" month="4" year="2004"/>
            <author login="dkonecny"/>
            <compatibility/>
            <description>
                <p>
                    Added query answering the source level of a Java file.
                </p>
            </description>
            <!-- <class package="org.netbeans.api.java.queries" name="SourceLevelQuery"/>
            <class package="org.netbeans.spi.java.queries" name="SourceLevelQueryImplementation"/> -->
        </change>

        <change id="ClassPath.buildsys">
            <api name="classpath"/>
            <summary><code>ClassPath</code> API changed to be pluggable and better support build system</summary>
            <version major="1" minor="4"/>
            <date day="16" month="3" year="2004"/>
            <author login="jglick"/>
            <compatibility binary="compatible" source="compatible" semantic="incompatible" deprecation="yes" addition="yes" modification="yes">
                <p>
                    Code which just called <code>ClassPath.getClassPath</code>
                    and so on as API clients should still be safe, <em>but</em>
                    passing null as a reference file no longer works.
                </p>
            </compatibility>
            <description>
                <p>
                    <code>ClassPath</code> is now final, not abstract. (Not
                    incompatible, since the constructor was never public.) Same
                    for <code>ClassPath.Entry</code>.
                </p>
                <p>
                    <code>getClassPath</code> now looks for
                    <code>ClassPathProvider</code>s rather than delegating to the
                    filesystems mounted in <code>Repository</code>.
                </p>
                <p>
                    The classpath type <code>DEBUG</code> was deprecated.
                    <code>SOURCE</code> and <code>BOOT</code> were added.
                </p>
                <p>
                    <code>ClassPath.Entry.getURL()</code> was added.
                </p>
                <p>
                    There is a complete SPI for creating <code>ClassPath</code>
                    instances.
                </p>
            </description>
            <!-- <class package="org.netbeans.api.java.classpath" name="ClassPath"/>
            <class package="org.netbeans.spi.java.classpath" name="ClassPathProvider"/>
            <class package="org.netbeans.spi.java.classpath" name="ClassPathFactory"/>
            <class package="org.netbeans.spi.java.classpath" name="ClassPathImplementation"/>
            <class package="org.netbeans.spi.java.classpath" name="PathResourceImplementation"/>
            <class package="org.netbeans.spi.java.classpath.support" name="ClassPathSupport"/>
            <class package="org.netbeans.spi.java.classpath.support" name="CompositePathResourceBase"/>
            <class package="org.netbeans.spi.java.classpath.support" name="PathResourceBase"/> -->
        </change>

        <change id="GlobalPathRegistry">
            <api name="classpath"/>
            <summary>Added <code>GlobalPathRegistry</code></summary>
            <version major="1" minor="4"/>
            <date day="16" month="3" year="2004"/>
            <author login="jglick"/>
            <compatibility>
                <p>
                    Note that <code>GlobalPathRegistry</code> serves some of the
                    same functions as <code>Repository.default</code> used to,
                    but client code should be reviewed carefully for usage.
                </p>
            </compatibility>
            <description>
                Added a new class <code>GlobalPathRegistry</code> to represent
                classpaths of current interest, typically from open projects.
            </description>
            <!-- <class package="org.netbeans.api.java.classpath" name="GlobalPathRegistry"/> -->
        </change>

        <change id="new-queries">
            <api name="queries"/>
            <summary>Added several queries</summary>
            <version major="1" minor="4"/>
            <date day="16" month="3" year="2004"/>
            <author login="jglick"/>
            <compatibility/>
            <description>
                <p>
                    Several new queries were added (API and SPI) to represent
                    various aspects of Java sources.
                </p>
            </description>
            <!-- <class package="org.netbeans.api.java.queries" name="AccessibilityQuery"/>
            <class package="org.netbeans.api.java.queries" name="JavadocForBinaryQuery"/>
            <class package="org.netbeans.api.java.queries" name="SourceForBinaryQuery"/>
            <class package="org.netbeans.api.java.queries" name="UnitTestForSourceQuery"/>
            <class package="org.netbeans.spi.java.queries" name="AccessibilityQueryImplementation"/>
            <class package="org.netbeans.spi.java.queries" name="JavadocForBinaryQueryImplementation"/>
            <class package="org.netbeans.spi.java.queries" name="SourceForBinaryQueryImplementation"/>
            <class package="org.netbeans.spi.java.queries" name="UnitTestForSourceQueryImplementation"/> -->
        </change>

    <change>
	<api name="classpath"/>
	<summary>ClassPath.getClassLoader method added</summary>
	<version major="1" minor="2" subminor="1"/>
	<date day="21" month="2" year="2003"/>
	<author login="sdedic"/>
	<compatibility semantic="compatible"/>
	<description>
	    ClassPath.getClassLoader() method allows to get classloader capable of loading
	    classes from the ClassPath.
	</description>
    </change>

    <change>
	<api name="classpath"/>
	<summary>ClassPath.getClassPath is permitted to return null value</summary>
	<version major="1" minor="2"/>
	<date day="9" month="12" year="2002"/>
	<author login="sdedic"/>
	<compatibility semantic="incompatible"/>
	<description>
	    ClassPath.getClassPath() documentation omitted the fact, that the method may
	    return <code>null</code>. Although the implementation functioned that way
	    from the beginning, it is considered an incompatible change (tightening of
	    the contract).
	</description>
    </change>    
</changes>

  <!-- Now the surrounding HTML text and document structure: -->

  <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <======================

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE xml/api/doc/changes/apichanges.xml

-->
    <head>
      <title>Java Support API changes by date</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>

<p>This document lists changes made to the Java Support APIs. Please ask on the 
<code>dev@java.netbeans.org</code> or <code>nbdev@netbeans.org</code>
mailing list if you have any questions about the details of a
change, or are wondering how to convert existing code to be compatible.</p>

      <hr/><standard-changelists module-code-name="org.netbeans.api.java/1"/>

      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>
</apichanges>
