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

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, this will be done periodically; just
change the XML. If you can, validate the XML against the DTD, if not
do not worry about it. Rough syntax of a change (several parts optional):

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

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

  <!-- First, a list of API names you may use: -->
  <apidefs>
    <!-- org.netbeans.modules.parsing.api -->
    <apidef name="ParsingAPI">Parsing API</apidef>
  </apidefs>

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

  <changes>
    <change id="Parsing.Netbeans.Cleanup">
          <api name="ParsingAPI"/>
          <summary>Parsing API cleaned up from IDE dependencies</summary>
          <version major="9" minor="1"/>
          <date day="6" month="5" year="2014"/>
          <author login="sdedic"/>
          <compatibility source="compatible" binary="compatible" semantic="incompatible" modification="yes"/>
          <description>
              <p>
                The Parsing API dependended on Windows System, Editor Registry, Data Systems and other IDE artifacts. All those
                dependencies were externalized as 'private SPIs' in the package <code>org.netbeans.modules.parsing.impspi</code>.
                The implementation that uses the other NetBeans IDE APIs resides in module <code>parsing.nb</code>.
                No API change was done, but the execution now relies on a proper binding to be present in the running application
                or a testsuite.
              </p>
              <p>
                Basic testing environment was provided in unit tests, which implements basic of the externalized functions. However
                if a test need to check reparsing after document change, or data object change. Full implementation may be needed -
                the implementor can use a <code>test-dependency</code> to the <code>org.netbeans.modules.parsing.nb</code> module.
              </p>
              <p>
                  Please also refer to the <a href="@org-netbeans-modules-parsing-api@/apichanges.html">API Changes document</a> of the parental module.
              </p>
          </description>
      </change>
  </changes>

  <htmlcontents>
<!--

                            NO NO NO NO NO!

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

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE parsing.api/apichanges.xml

-->
    <head>
        <title>Change History for the Parsing &amp; Indexing API</title>
        <link rel="stylesheet" href="prose.css" type="text/css"/>
        <meta name="CATEGORY" content="OtherDevelopmentDoc"/>
        <meta name="DESCRIPTION" content="A cross-indexed list of all changes made to the Parsing &amp; Indexing API."/>
    </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>
        <hr/>
        <standard-changelists module-code-name="$codebase"/>
        <hr/>
        <p>@FOOTER@</p>
    </body>
  </htmlcontents>

</apichanges>
