<?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">Source for binary and binary for source queries</apidef>
</apidefs>

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

<changes>
    <change id="MultiplexClassPath">
            <api name="classpath"/>
            <summary>Added a <code>ClassPath</code> switching among several <code>ClassPath</code> instances</summary>
            <version major="1" minor="54"/>
            <date day="4" month="10" year="2016"/>
            <author login="tzezula"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added a factory method into <code>ClassPathSupport</code> creating a <code>ClassPath</code>
                    switching among several <code>ClassPath</code> instances.
                </p>
            </description>
            <class package="org.netbeans.spi.java.classpath.support" name="ClassPathSupport"/>
        </change>
        <change id="PathEmbeddingMode">
            <api name="classpath"/>
            <summary>Added a policy for handling in archive paths</summary>
            <version major="1" minor="52"/>
            <date day="2" month="6" year="2015"/>
            <author login="tzezula"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added a policy for handling in archive paths while converting the <code>ClassPath</code> to <code>String</code>.
                    The <code>ClassPath.toString</code> takes a <code>PathEmbeddingMode</code> parameter determining how the in archive
                    path is handled. It can be included into stringified root, omitted from it, or handled as an invalid classpath root.
                </p>
            </description>
            <class package="org.netbeans.api.java.classpath" name="ClassPath"/>
        </change>
        <change id="GlobalPathRegistryImplementation">
            <api name="classpath"/>
            <summary>Added a SPI interface to allow different implementations of <code>GlobalPathRegistry</code></summary>
            <version major="1" minor="48"/>
            <date day="31" month="10" year="2014"/>
            <author login="tzezula"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added a SPI interface to allow different implementations of the <code>GlobalPathRegistry</code>.
                    The <code>GlobalPathRegistry</code> uses the first instance od the <code>GlobalPathRegistryImplementation</code>
                    registered in the global <code>Lookup</code>
                </p>
            </description>
            <class package="org.netbeans.spi.java.classpath" name="GlobalPathRegistryImplementation"/>
        </change>
        <change id="ClassPath.getFlags">
            <api name="classpath"/>
            <summary>Added ClassPath flags</summary>
            <version major="1" minor="44"/>
            <date day="21" month="8" year="2014"/>
            <author login="tzezula"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added flags to <code>ClassPath</code>
                </p>
            </description>
            <class package="org.netbeans.api.java.classpath" name="ClassPath"/>
            <class package="org.netbeans.spi.java.classpath" name="FlaggedClassPathImplementation"/>
            <issue number="245155"/>
        </change>
        <change id="ClassPath.EMPTY">
            <api name="classpath"/>
            <summary>Added a constant representing an empty ClassPath</summary>
            <version major="1" minor="24"/>
            <date day="5" month="2" year="2010"/>
            <author login="tzezula"/>
            <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
            <description>
                <p>
                    Added a constant representing an empty ClassPath like java.util.Collections.EMPTY_LIST.
                    This ClassPath has no entries and never fires any events.
                </p>
            </description>
            <issue number="179799"/>
        </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="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>
            <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>ClassPath 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 ClassPath 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.classpath/1"/>

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

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