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

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>
    <!-- Probably should not be used much: -->
    <apidef name="general">Ant module APIs</apidef>
  </apidefs>

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

    <changes>
        
        <change id="userExecution">
            <api name="general"/>
            <summary>Added a method to mark an execution as user / non-user into the <code>AntTargetExecutor.Env</code></summary>
            <version major="3" minor="85"/>
            <date year="2017" month="5" day="2"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>Added a method <code>AntTargetExecutor.Env.setUserAction</code>to mark an execution as user / non-user.
                The executions marked as user actions are registered in the UI support
                <code>org.netbeans.spi.project.ui.support.BuildExecutionSupport</code>. By default the execution is an user action.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api" name="AntTargetExecutor"/>
        </change>

        <change id="tabReplacePolicy">
            <api name="general"/>
            <summary>Added methods to override the default tab replacement policy into the <code>AntTargetExecutor.Env</code></summary>
            <version major="3" minor="84"/>
            <date year="2017" month="4" day="27"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    When the IDE is set to the automatic close tabs mode the tabs created by the previous
                    run of the <code>AntTargetExecutor</code> are closed by successive run.
                    Added a support to override this behavior.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api" name="AntTargetExecutor"/>
        </change>

        <change id="setConcealedProperties">
            <api name="general"/>
            <summary>Added <code>AntTargetExecutor.Env.setConcealedProperties</code></summary>
            <version major="3" minor="73"/>
            <date year="2013" month="10" day="2"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added ability to hide property values. Such properties can
                    be used to pass passwords from the IDE keyring to ant scripts.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api.support" name="ActionUtils"/>
            <class package="org.apache.tools.ant.module.api" name="AntTargetExecutor"/>
            <class package="org.apache.tools.ant.module.spi" name="AntSession"/>
        </change>

        <change id="returningParseException">
            <api name="general"/>
            <summary><code>TargetLister.Script</code> is now returning information about parse exception</summary>
            <version major="3" minor="72"/>
            <date year="2013" month="9" day="26"/>
            <author login="mkozeny"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code>TargetLister.Script</code> constructor is now returning information about parse exception, when parsing of document fails.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api.support" name="TargetLister"/>
            <issue number="57677"/>
        </change>        

        <change id="originatingScript">
            <api name="general"/>
            <summary>Added <code>TargetLister.Target.getOriginatingScript</code></summary>
            <version major="3" minor="53"/>
            <date year="2012" month="1" day="18"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added ability to get originating script for a <code>Target</code>.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api.support" name="TargetLister"/>
            <issue number="207192"/>
        </change>

        <change id="AntSession.getProperties">
            <api name="general"/>
            <summary>Added <code>AntSession.getProperties</code></summary>
            <version major="3" minor="52"/>
            <date year="2011" month="12" day="15"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added ability to get user properties defined for a build.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.spi" name="AntSession"/>
            <issue number="206161"/>
        </change>

        <change id="AntSession.getIO">
            <api name="general"/>
            <summary>Added <code>AntSession.getIO</code></summary>
            <version major="3" minor="35"/>
            <date day="16" month="3" year="2009"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added ability to get the underlying <code>InputOutput</code>
                    object for advanced formatting.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.spi" name="AntSession"/>
            <issue number="124366"/>
        </change>

        <change id="AntScriptUtils">
            <api name="general"/>
            <summary>Added <code>AntScriptUtils</code></summary>
            <version major="3" minor="31"/>
            <date day="12" month="6" year="2008"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added a new convenience class for getting some common information from Ant scripts.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api.support" name="AntScriptUtils"/>
            <issue number="136597"/>
        </change>

        <change id="AntEvent-references">
            <api name="general"/>
            <summary>Ant loggers can now inspect Ant reference objects</summary>
            <version major="3" minor="29"/>
            <date day="6" month="3" year="2008"/>
            <author login="jglick"/>
            <compatibility modification="yes" semantic="compatible">
                <p>
                    Properties of the same name take precedence over references,
                    so only code which relied on a property name <em>not</em>
                    being set would see different behavior.
                </p>
            </compatibility>
            <description>
                <p>
                    The <code>AntEvent</code> methods <code>getProperty</code> and
                    <code>getPropertyNames</code> can now work with Ant references
                    as well as plain properties. This is critical for loggers which
                    wish to inspect e.g. the runtime value of a classpath given as:
                </p>
                <pre>&lt;classpath refid="my.cp"/&gt;</pre>
                <p>
                    which otherwise would be inaccessible.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.spi" name="AntEvent"/>
            <issue number="128778"/>
        </change>

        <change id="IntrospectedInfo.serializable">
            <api name="general"/>
            <summary><code>IntrospectedInfo</code> no longer serializable</summary>
            <version major="3" minor="26"/>
            <date day="14" month="10" year="2006"/>
            <author login="jglick"/>
            <compatibility deletion="yes" source="incompatible" binary="incompatible">
                <p>
                    Any clients which were attempting to serialize <code>IntrospectedInfo</code>
                    objects will no longer be able to. No one should have been doing this to
                    begin with; the class was offered to API clients for inspection in a given
                    Ant session, but serialization was handled by the Ant module implementation.
                </p>
            </compatibility>
            <description>
                <p>
                    As part of a switch to the Preferences API, this class no longer needs
                    to be serialized.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api" name="IntrospectedInfo"/>
            <issue number="87114"/>
        </change>

        <change id="AutomaticExtraClasspathProvider.url.factory">
            <api name="general"/>
            <summary>Factory method to create AutomaticExtraClasspathProvider</summary>
            <version major="3" minor="26"/>
            <date day="20" month="6" year="2006"/>
            <author login="jtulach"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code>AutomaticExtraClasspathProvider</code> can now be 
                    created in a declarative way. So libraries that wish to
                    provide such Ant extension may just do it in declarative
                    way without depending on <code>AutomaticExtraClasspathProvider</code>
                    class.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.spi" name="AutomaticExtraClasspathProvider"/>            
            <issue number="77489"/>
        </change>
    
        <change id="AntProjectDataLoader.actionsContext">
            <api name="general"/>
            <summary>Can now declaratively extend Ant context menu items</summary>
            <version major="3" minor="17"/>
            <date day="23" month="3" year="2005"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    You may now extend the Ant main node's context menu using the
                    layer context <code>Loaders/text/x-ant+xml/Actions</code>.
                </p>
            </description>
        </change>
    
	<change id="ActionUtils.antIncludesList">
            <api name="general"/>
            <summary>Added antIncludesList (FileObject[] files, FileObject dir, boolean recursive) method </summary>
            <version major="3" minor="16"/>
            <date day="21" month="3" year="2005"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                The current ActionUtils.antIncludeList (FileObject[] files, FileObject dir)
                generates a recursive include list for directories. The API change introduces
                new ActionUtils.antIncludeList (FileObject[] files, FileObject dir, boolean
                recursive) which generates either recursive or non recursive include depending
                on the value of the recursive parameter.
                The old method is bridged into the new one.    
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api.support" name="ActionUtils"/>            
            <issue number="51132"/>
        </change>
        
        <change id="AntLogger">
            <api name="general"/>
            <summary>Added Ant logging SPI</summary>
            <version major="3" minor="12"/>
            <date day="11" month="6" year="2004"/>
            <author login="jglick"/>
            <compatibility deprecation="yes" addition="yes">
                <p>
                    <code>AntOutputStream</code> was obsoleted by this change.
                </p>
            </compatibility>
            <description>
                <p>
                    Added a new SPI for influencing the logging behavior of Ant.
                    See Javadoc for details.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.spi" name="AntLogger"/>
            <class package="org.apache.tools.ant.module.spi" name="AntSession"/>
            <class package="org.apache.tools.ant.module.spi" name="AntEvent"/>
            <class package="org.apache.tools.ant.module.spi" name="TaskStructure"/>
            <class package="org.apache.tools.ant.module.spi" name="AntOutputStream"/>
            <issue number="42525"/>
        </change>
    
        <change id="TargetLister">
            <api name="general"/>
            <summary>Added <code>TargetLister</code></summary>
            <version major="3" minor="11"/>
            <date day="3" month="6" year="2004"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    The <code>TargetLister</code> class was added to make it easier
                    to implement target-related UI without needing to duplicate logic
                    relating to <code>&lt;import&gt;</code>.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api.support" name="TargetLister"/>
            <issue number="21728"/>
            <issue number="36320"/>
            <issue number="42901"/>
        </change>
  
        <change id="AntProjectCookie.Serializable">
            <api name="general"/>
            <summary><code>AntProjectCookie</code> no longer guaranteed serializable</summary>
            <version major="3" minor="10"/>
            <date day="11" month="5" year="2004"/>
            <author login="jglick"/>
            <compatibility modification="yes" semantic="incompatible">
                <p>
                    Incompatible for anyone expecting to serialize them.
                </p>
            </compatibility>
            <description>
                <p>
                    <code>AntProjectCookie</code> used to be serializable. This was
                    used to persist build script information associated with service
                    types. Now that these types are gone, the raison d'être for the
                    serializability is also gone.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api" name="AntProjectCookie"/>
        </change>
  
        <change id="AntOutputStream.writeLine.URL">
            <api name="general"/>
            <summary><code>AntOutputStream</code> should be passed <code>URL</code> not <code>FileObject</code></summary>
            <version major="3" minor="10"/>
            <date day="30" month="4" year="2004"/>
            <author login="jglick"/>
            <compatibility addition="yes" deprecation="yes" source="compatible" semantic="compatible">
                <p>
                    Old subclasses of <code>AntOutputStream</code> should continue
                    to work unmodified. But new subclasses which override the new
                    method taking URL must return <code>true</code> so that the
                    old method is not called. The old method is now non-final but
                    cannot be called. The new method is non-final but should be
                    treated as abstract.
                </p>
            </compatibility>
            <description>
                <p>
                    Formerly <code>AntOutputStream</code> was passed a <code>FileObject</code>
                    parameter in <code>writeLine</code>. However that was potentially
                    inefficient as it required a <code>FileObject</code> to be created for
                    each hyperlink, if it was never activated. The former <code>writeLine</code>
                    method has been deprecated and subclasses should now override the new
                    variant that takes <code>URL</code> (and should return <code>true</code>).
                </p>
            </description>
            <class package="org.apache.tools.ant.module.spi" name="AntOutputStream"/>
            <issue number="42666"/>
        </change>

        <change id="ActionUtils">
            <api name="general"/>
            <summary>Added <code>ActionUtils</code></summary>
            <version major="3" minor="9"/>
            <date day="21" month="3" year="2004"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    The utility class <code>ActionUtils</code> was added to help
                    implement actions based on Ant targets. Previously it was in
                    the Ant Project SPI.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.api.support" name="ActionUtils"/>
        </change>

        <change id="AntOutputStream.formatMessage">
            <api name="general"/>
            <summary>Deprecated <code>AntOutputStream.formatMessage</code></summary>
            <version major="3" minor="8"/>
            <date day="16" month="3" year="2004"/>
            <author login="jglick"/>
            <compatibility deprecation="yes"/>
            <description>
                <p>
                    This method is no longer called due to changes in how Ant
                    output formatting is handled, so it is deprecated.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.spi" name="AntOutputStream"/>
        </change>

        <change id="AutomaticExtraClasspathProvider">
            <api name="general"/>
            <summary>Added <code>AutomaticExtraClasspathProvider</code></summary>
            <version major="3" minor="8"/>
            <date day="16" month="3" year="2004"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    A new SPI interface
                    <code>AutomaticExtraClasspathProvider</code> was added in
                    order to make it possible to include bundled libraries such
                    as <code>junit.jar</code> in Ant's main classpath without
                    user intervention.
                </p>
            </description>
            <class package="org.apache.tools.ant.module.spi" name="AutomaticExtraClasspathProvider"/>
        </change>

        <change id="antlib.xml">
            <api name="general"/>
            <summary>Format of <code>ant/nblib/*.jar</code> changed to use <code>antlib.xml</code></summary>
            <version major="3" minor="6"/>
            <date day="7" month="1" year="2004"/>
            <author login="jglick"/>
            <compatibility semantic="incompatible" modification="yes">
                Existing modules installing taskdef JARs in this directory must change their format.
                The previous format was however introduced after NetBeans 3.5 in the trunk.
            </compatibility>
            <description>
                <code>ant/nblib/*.jar</code> taskdef (or typedef) JARs must now
                be named according to the code name base of the module, and must
                define their tasks (or types etc.) using the standard
                <code>antlib.xml</code> syntax rather than
                <code>META-INF/taskdefs.properties</code> and/or
                <code>META-INF/typedefs.properties</code>.
            </description>
            <issue number="38306"/>
        </change>
  
    <change>
         <api name="general"/>
         <summary>ParseStatus cookie was added</summary>
         <version major="2" minor="10"/>
         <date day="27" month="6" year="2002"/>
         <author login="dkonecny"/>
         <compatibility addition="yes"/>
         <description>
	 ParseStatus cookie which extends AntProjectCookie was added to API.
	 It permits queries of parse status.
         </description>
      <class package="org.apache.tools.ant.module.api" name="AntProjectCookie"/>
      <issue number="24213"/>
    </change>
    
    <change>
        <api name="general"/>
        <summary><code>IntrospectedInfo.getKnownInfo()</code> added</summary>
        <version major="2" minor="14"/>
        <date day="7" month="1" year="2003"/>
        <author login="jglick"/>
        <compatibility addition="yes" modification="yes"/>
        <description>
            This new static convenience method gives you one info object containing
            all tasks and types, both those built into Ant, and custom definitions
            too.
        </description>
        <class package="org.apache.tools.ant.module.api" name="IntrospectedInfo"/>
    </change>
    
    <change id="IntrospectedInfo.getTags">
        <api name="general"/>
        <summary><code>IntrospectedInfo.getTags(String)</code> added</summary>
        <version major="3" minor="3"/>
        <date day="8" month="11" year="2003"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <code>IntrospectedInfo</code> now keeps information about the tag values
            represented by <code>EnumeratedAttribute</code> subclasses, so it is not
            necessary to load the runtime class just for this information.
        </description>
        <class package="org.apache.tools.ant.module.api" name="IntrospectedInfo"/>
        <issue number="37111"/>
    </change>

    <change id="AntTargetExecutor">
        <api name="general"/>
        <summary>API for target execution was added</summary>
        <version major="2" minor="15"/>
        <date day="27" month="1" year="2003"/>
        <author login="dkonecny"/>
        <compatibility addition="yes"/>
        <description>
            AntTargetExecutor class for target execution was added. It has factory method 
            createTargetExecutor() which for the the given instance of AntTargetExecutor.Env creates 
            instance of AntTargetExecutor capable to execute list of targets from the Ant script
            represented by AntProjectCookie. The AntTargetExecutor.Env class describes 
            environment which is used during the target execution.
        </description>
        <class package="org.apache.tools.ant.module.api" name="AntTargetExecutor"/>
    </change>

    <change id="AntOutputStream">
        <api name="general"/>
        <summary>SPI for parsing of output from Ant execution</summary>
        <version major="2" minor="15"/>
        <date day="27" month="1" year="2003"/>
        <author login="dkonecny"/>
        <compatibility addition="yes"/>
        <description>
            AntOutputStream abstract class was added which simplifies handling and parsing
            of output produced during the Ant script execution. It parses the output and if it
            contains information in the form of <code>file_name : line_column : error_description</code>
            it will parse the information and finds FileObject for the file_name.
        </description>
        <class package="org.apache.tools.ant.module.spi" name="AntOutputStream"/>
    </change>
    
    <change id="pluggable-ant">
        <api name="general"/>
        <summary>Redesign to support pluggable Ant installation</summary>
        <version major="3" minor="1"/>
        <date day="7" month="7" year="2003"/>
        <author login="jglick"/>
        <compatibility deletion="yes" modification="yes" binary="incompatible" source="incompatible" semantic="incompatible">
            <p>
                There are several incompatible changes here:
            </p>
            <ol>
                <li>
                    <p>
                        All previously deprecated methods and classes were removed
                        as a cleanup measure.
                    </p>
                </li>
                <li>
                    <p>
                        Registration of VM-internal (NetBeans-specific) tasks changed.
                        Rather than using <code>DefinitionRegistry</code> and Lookup,
                        task JARs are placed in a well-known location.
                    </p>
                </li>
                <li>
                    <p>
                        Modules depending on the Ant module can no longer refer to
                        Ant classes directly, i.e. they are no longer exported from
                        the Ant module class loader.
                    </p>
                </li>
                <li>
                    <p>
                        <code>IntrospectedInfo.scanProject</code> changed its
                        parameter from <code>Project</code> to <code>Map</code>.
                    </p>
                </li>
                <li>
                    <p>
                        The major release version changed from 2 to 3. Modules which
                        are unaffected by the above changes may elect to depend on
                        either version: <samp>org.apache.tools.ant.module/2-3</samp>.
                    </p>
                </li>
            </ol>
        </compatibility>
        <description>
            <p>
                The Ant module was partially refactored to permit the actual Ant
                installation to be user-selectable and modifiable at runtime, plus
                to use an independent class loader with its own classpath for running
                Ant in. This necessitated some structural changes in the public APIs.
            </p>
            <p>
                Modules which registered automatic task definitions will need to be
                changed to use the new API. Typically such tasks run only inside the
                NetBeans VM, do not need a <samp>&lt;taskdef&gt;</samp>, and make use
                of API calls into NetBeans modules. Other uses of the Ant module&mdash;for
                example, calls to <code>AntTargetExecutor</code>&mdash;are unlikely to
                be affected by the change.
            </p>
        </description>
        <class package="org.apache.tools.ant.module.api" name="IntrospectedInfo"/>
        <class package="org.apache.tools.ant.module.api" name="DefinitionRegistry" link="no"/>
        <class package="org.apache.tools.ant.module.api" name="AntTargetCookie" link="no"/>
        <issue number="20211"/>
    </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 ant/api/doc/changes/apichanges.xml

-->
    <head>
      <title>NetBeans Ant module API Changes by Date</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 NetBeans Ant module APIs."/>
    </head>
    <body>

<h1>Introduction</h1>

<p>This document lists changes made to the NetBeans
Ant module APIs. Please ask on the <code>nbdev@netbeans.org</code>
mailing list if you have any questions.</p>

<div>
      <hr/><standard-changelists module-code-name="org.apache.tools.ant.module/3"/>
</div>
    </body>
  </htmlcontents>

</apichanges>
