<?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="BinaryForSourceQueryImplementation2">
        <api name="classpath"/>
        <summary>Prefer binaries over sources when parsing</summary>
        <version major="1" minor="58"/>
        <date day="14" month="2" year="2019"/>
        <author login="jtulach"/>
        <compatibility addition="yes" modification="no" semantic="compatible" source="compatible" binary="compatible"/>
        <description>
            <p>
                New <code>Result2</code> and new <code>BinaryForSourceQueryImplementation2</code>
                that allows one to specify that binaries should be used instead
                of compiling the sources (if the binaries are already compiled and
                newer).
            </p>
        </description>
        <class package="org.netbeans.api.java.queries" name="BinaryForSourceQuery"/>
        <class package="org.netbeans.spi.java.queries" name="BinaryForSourceQueryImplementation2"/>
    </change>
    <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>
