<?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, as this is part of Javadoc generation; just
change the XML. 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>
        <apidef name="general">Gradle Project API</apidef>
        <!-- etc. -->
    </apidefs>

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

    <changes>
        <change id="gradle-reports">
            <api name="general"/>
            <summary>Rich exception reports are exported from Gradle process.</summary>
            <version major="2" minor="27"/>
            <date day="20" month="8" year="2022"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                Errors are transferred including their causes and script location(s), so the IDE may provide better messages or hints.
                <p>
                    The new class <code>
                        <a href="@TOP@/org/netbeans/modules/gradle/api/GradleReport.html">GradleReport</a>
                    </code> that contain this information is available from
                <code><a href="@TOP@/org/netbeans/modules/gradle/api/GradleBaseProject.html#getProblems">GradleBaseProject.getProblems()</a></code> method.
                </p>
            </description>
        </change>
        <change id="configuration-dependencies">
            <api name="general"/>
            <summary>Allow to inspect dependency tree</summary>
            <version major="2" minor="27"/>
            <date day="12" month="8" year="2022"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                Gradle APIs allow to list dependencies as a flat list, mixing the 4th+ party dependencies in. The API extension allows
                to inspect the dependency structure and determine what configuration the dependency originates from.
            </description>
            <class package="org.netbeans.modules.gradle.api" name="GradleBaseProject"/>
            <class package="org.netbeans.modules.gradle.api" name="GradleConfiguration"/>
        </change>
        <change id="gradlefiles-versioncatalog">
            <api name="general"/>
            <summary>GradleFiles.Kind.VERSION_CATALOG introduced</summary>
            <version major="2" minor="25"/>
            <date day="15" month="7" year="2022"/>
            <author login="lkishalmi"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                <a href="@TOP@/org/netbeans/modules/gradle/spi/GradleFiles.Kind.html#VERSION_CATALOG">GradleFiles.Kind.VERSION_CATALOG</a>
                was addedd to represent <code>$rootDir/gradle.libs.versions.toml</code> file of the project.
                <code>
                    <a href="@TOP@/org-netbeans-modules-gradle/org/netbeans/modules/gradle/spi/GradleFiles.html#getFile-org.netbeans.modules.gradle.spi.GradleFiles.Kind-">GradleFiles.getKind(VERSION_CATALOG)</a>
                </code> can be used to retrieve the represented file. (The file might not exists though.)
            </description>
            <class package="org.netbeans.modules.gradle.api" name="NbGradleProject"/>
        </change>
        <change id="gradleproject-files">
            <api name="general"/>
            <summary>GradleFiles can be obtained from API</summary>
            <version major="2" minor="24"/>
            <date day="30" month="4" year="2022"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                <a href="@TOP@/org/netbeans/modules/gradle/spi/GradleFiles.html">GradleFiles</a> can be obtained from
                <a href="@TOP@/org/netbeans/modules/gradle/api/NbGradleProject.html">NbGradleProject</a> instance. Gradle project
                users can use <code>GradleFiles</code> to get important files or pathnames in the project.
            </description>
            <class package="org.netbeans.modules.gradle.api" name="NbGradleProject"/>
        </change>
        <change id="gradle-cli-update">
            <api name="general"/>
            <summary>GradleCommandLine Flag, Parameter, and Property implements GradleOptionItem interface</summary>
            <version major="2" minor="23"/>
            <date day="17" month="2" year="2022"/>
            <author login="lkishalmi"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                <p>
                    Added GradleOptionItem interface to <code><a href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleCommandLine.html">GradleCommandLine</a></code>
                    in order to support a common interface for Flaf, Parameter, and Property enums.
                </p>
                <p>
                    <code>
                        <a href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleCommandLine.html">GradleCommandLine</a>
                    </code> also can be aware of the GradleDistribution it is plan to be used with, so it got a few
                    new constructors supporting that.
                </p>
                <p>
                    <code>
                        <a href="@TOP@/org/netbeans/modules/gradle/api/execute/RunUtils.html#getCompatibleGradleDistribution-org.netbeans.api.project.Project-">RunUtils.getCompatibleGradleDistribution</a>
                    </code>is added to help retrieve the closest Gradle distribution a project could use to invoke Gradle build actions.
                </p>
            </description>
        </change>
        <change id="tooling-runWorkingDir-runEnvironment">
            <api name="general"/>
            <summary>NetBeans Tooling plugin recognizes "runWorkingDir" and "runEnvironment" properties.</summary>
            <version major="2" minor="21"/>
            <date day="23" month="9" year="2021"/>
            <author login="entlicher"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                Introduced <code>runWorkingDir</code> and <code>runEnvironment</code> project properties that can be passed
                to NetBeans Tooling plugin in order to inject user parameters into gradle JavaExec task configurations.
                The property <code>runWorkingDir</code> shall contain an absolute path of the working directory.
                The property <code>runEnvironment</code> shall contain possibly quoted space-separated expressions of
                <code>VAR_NAME=VAR_VALUE</code>, or <code>!VAR_NAME</code>. The <code>VAR_NAME=VAR_VALUE</code> sets
                environment variable <code>VAR_NAME</code> to value <code>VAR_VALUE</code> and <code>!VAR_NAME</code>
                removes variable <code>VAR_NAME</code> from the set of environment variables.
            </description>
        </change>
        <change id="gradle-init">
            <api name="general"/>
            <summary>
                Request project creation via Gradle init.
            </summary>
            <version major="2" minor="20"/>
            <date day="8" month="8" year="2021"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                Use <a href="@TOP@/org/netbeans/modules/gradle/spi/newproject/TemplateOperation.html#createGradleInit-java.io.File-java.lang.String-">createGradleInit</a>
                to ask Gradle to create new project using its <code>init</code> functionality.
            </description>
            <class package="org.netbeans.modules.gradle.spi.newproject" name="TemplateOperation"/>
        </change>
        <change id="config-disabled-action">
            <api name="general"/>
            <summary>
                Action can be disabled for a configuration.
            </summary>
            <date day="19" month="6" year="2021"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                <a href="@TOP@/org/netbeans/modules/gradle/spi/actions/GradleActionsProvider.html">GradleActionsProviders</a> may
                <b>disable action</b> in a provided configuration, for example if the configured environment does not permit
                the action to be run.
            </description>
            <class package="org.netbeans.modules.gradle.api.execute" name="ActionMapping"/>
        </change>
        <change id="configurations">
            <api name="general"/>
            <summary>
                Support for Project Configurations
            </summary>
            <version major="2" minor="13"/>
            <date day="30" month="5" year="2021"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                <p>
                    Concept of <a href="@org-netbeans-modules-projectapi@/org/netbeans/spi/project/ProjectConfiguration.html">ProjectConfigurations</a> was implemented for
                    Gradle projects with <a href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleExecConfiguration.html">GradleExecConfiguration</a> class. Configurations
                    can be created by the user and are stored in project private/shared configuration storage. Configurations can be contributed by Plugins using 
                    <a href="@TOP@/org/netbeans/modules/gradle/spi/actions/GradleActionsProvider.html#define-configuration">GradleActionsProvider</a>. A configuration 
                    <a href="@org-netbeans-modules-projectapi@/org/netbeans/spi/project/ProjectConfigurationProvider.html#setActiveConfiguration--">can be activated</a> or 
                    explicitly requested for <a href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleExecConfiguration.html#request-for-invocation">action invocation.</a>.
                </p>
                <p>
                    Actions can have different <a href="@TOP@/org/netbeans/modules/gradle/api/actions/ActionMapping.html">ActionMappings</a> in individual Configurations, user-defined
                    or provided for specific configuration by <a href="@TOP@/org/netbeans/modules/gradle/spi/actions/GradleActionsProvider.html">GradleActionsProvider</a>.
                </p>
                <p>
                    Action providers can be added fully declarative, using XML layer: See <a href="@TOP@/org/netbeans/modules/gradle/spi/actions/DefaultGradleActionsProvider.html##forProjectLayer-org.openide.filesystems.FileObject-">
                    DefaultGradleActionsProvider.forProjectLayer</a>
                </p>
                
            </description>
            <class package="org.netbeans.modules.gradle.api.execute" name="GradleExecConfiguration"/>
            <class package="org.netbeans.modules.gradle.api.execute" name="RunUtils"/>
            <class package="org.netbeans.modules.gradle.api.execute" name="RunConfig"/>
            <class package="org.netbeans.modules.gradle.spi.actions" name="GradleActionsProvider"/>
        </change>
        <change id="reload-to-quality">
            <api name="general"/>
            <summary>
                Added API to reload Gradle project information. 
            </summary>
            <version major="2" minor="11"/>
            <date day="18" month="4" year="2021"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                Project information can be refreshed to a desired quality using <a href="@TOP@/org/netbeans/modules/gradle/api/NbGradleProject.html#toQuality-java.lang.String-org.netbeans.modules.gradle.api.NbGradleProject.Quality-boolean-">NbGradleProject.toQuality</a>. 
                The caller may chain after reload completes or block until the project is loaded.
            </description>
            <class package="org.netbeans.modules.gradle.api" name="NbGradleProject"/>
            <issue number="NETBEANS-5627"/>
        </change>
        <change id="local-gradle-version-discovery">
            <api name="general"/>
            <summary>GradleDistributionManager can detect local Gradle Distributions</summary>
            <version major="2" minor="10"/>
            <date day="12" month="4" year="2021"/>
            <author login="lkishalmi"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                Added <code><a href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.html#availableLocalDistributions--">GradleDistributionManager.availableLocalDistributions()</a></code> 
                method to help detection the already available GradleDistribution-s installed in the system.
            </description>
        </change>
        <change id="tooling-runJvmArgs">
            <api name="general"/>
            <summary>NetBeans Tooling plugin recognizes "runJvmArgs" property</summary>
            <version major="2" minor="9"/>
            <date day="27" month="3" year="2021"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                Introduced <code>runJvmArgs</code> project property that can be passed to NetBeans Tooling plugin in order to inject user JVM parameters
                into gradle JavaExec task configurations. The property value shall contain whitespace-separated JVM arguments.
            </description>
        </change>
        <change id="trust-question-branding">
            <api name="general"/>
            <summary>Project trust dialog can be customized by branding</summary>
            <version major="2" minor="8"/>
            <date day="3" month="3" year="2021"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                Branding API can be used to select and order options present in "Trust Gradle project for execution" confirmation
                dialog. See <a href="@TOP@/org/netbeans/modules/gradle/api/execute/RunUtils.html#isProjectTrusted-org.netbeans.api.project.Project-boolean-">RunUtils.isProjectTrusted</a>.
            </description>
        </change>
        <change id="deprecate-experimental-settings">
            <api name="general"/>
            <summary>Make ProjectActionMappingProvider available for other modules.</summary>
            <version major="2" minor="7"/>
            <date day="1" month="1" year="2021"/>
            <author login="lkishalmi"/>
            <compatibility semantic="incompatible" deprecation="yes"/>
            <description>
                <p>
                    Experimental settings, <code>openLazy</code> and <code>disableDiskCache</code> in
                    <a href="@TOP@/org/netbeans/modules/gradle/spi/GradleSettings.html">GradleSettings</a>
                    made deprecated and no longer affect the IDE behavior.
                </p>
            </description>
        </change>
        <change id="expose-project-action-mapping-provider">
            <api name="general"/>
            <summary>Make ProjectActionMappingProvider available for other modules.</summary>
            <version major="2" minor="6"/>
            <date day="15" month="10" year="2020"/>
            <author login="lkishalmi"/>
            <compatibility semantic="compatible"/>
            <description>
                <p>
                    Made  <a href="@TOP@/org/netbeans/modules/gradle/spi/actions/ProjectActionMappingProvider.html">ProjectActionMappingProvider</a> available
                    for other modules, so they either can provide an alternative implementation or most probably able to take a sneak peek on
                    the current action configuration.
                </p>
                <p>
                    In order to make other modules interpret the action mapping in context <a href="@TOP@/org/netbeans/modules/gradle/api/execute/RunUtils.html">RunUtils</a> got a new evaluateActionArgs
                    utility method which can replace tokens provided in ActionMapping arguments.
                </p>
                <p>
                    Finally to support this token replacement, <a href="@TOP@/org/netbeans/modules/gradle/spi/actions/ReplacementTokenProvider.html">ReplacementTokenProvider</a>
                    got a new static method <code>replaceTokens</code>.
                </p>
            </description>
        </change>
        <change id="reusetabs">
            <api name="general"/>
            <summary>Default for reusing tabs</summary>
            <version major="2" minor="5"/>
            <date day="15" month="10" year="2020"/>
            <author login="jtulach"/>
            <compatibility semantic="compatible"/>
            <description>
                <p>
                    Introducing <a href="@TOP@architecture-summary.html#group-branding">branding APIs</a>
                    to configure default value for <b>reusing tabs</b> in Gradle projects.
                </p>
            </description>
        </change>
        <change id="gradle-buildsrc-project">
            <api name="general"/>
            <summary>GradleFiles SPI has the methods to deal with the buildSrc project.</summary>
            <version major="2" minor="4"/>
            <date year="2020" month="10" day="7"/>
            <author login="lkishalmi"/>
            <compatibility binary="compatible" source="compatible"/>
            <description>
                <p>
                    <code><a href="@TOP@/org/netbeans/modules/gradle/spi/GradleFiles.html#isBuildSrcProject()">GradleFiles.isBuildSrcProject()</a></code> was
                    added to detect if a project id a buildSrc project, and a new file Kind has been introduced <code>BUILD_SRC</code>.
                </p>
            </description>
        </change>
        <change id="gradle-project-connection">
            <api name="general"/>
            <summary>Expose Gradle ProjectConnection through Project's Lookup.</summary>
            <version major="2" minor="4"/>
            <date year="2020" month="8" day="21"/>
            <author login="lkishalmi"/>
            <compatibility binary="compatible" source="compatible"/>
            <description>
                <p>
                    Gradle's <code><a href="https://docs.gradle.org/current/javadoc/org/gradle/tooling/ProjectConnection.html">ProjectConnection</a></code>
                    is now available on the project lookup, making possible for modules to interact with Gradle in deeper level.
                </p>
            </description>
        </change>
        <change id="gradle-distribution-manager">
            <api name="general"/>
            <summary>Expose GradleDistribution manager as an API.</summary>
            <version major="2" minor="4"/>
            <date year="2020" month="8" day="21"/>
            <author login="lkishalmi"/>
            <compatibility binary="compatible" source="compatible"/>
            <description>
                <p>
                    Starting to give the project more freedom over control of
                    their <code><a href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.GradleDistribution.html">GradleDistribution</a></code> in use, the previously non-API
                    <code><a href="@TOP@/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.html">GradleDistributionManager</a></code> got a review and got moved into
                    execution apis. Together with the <code>GradleDistributionProvider</code>
                    (API/SPI) it is possible to fetch information on the Gradle
                    Distribution used in the project.
                </p>
                <p>
                    <code><a href="@TOP@/org/netbeans/modules/gradle/spi/execute/GradleDistributionProvider.html">GradleDistributionProvider</a></code> has a default implementation it
                    is not necessary to implement it. With that new interface
                    the <code><a href="@TOP@/org/netbeans/modules/gradle/api/execute/RunUtils.html#evaluateGradleDistribution-org.netbeans.api.project.Project-boolean-">RunUtils.evaluateGradleDistribution()</a></code>
                    got deprecated.
                </p>
            </description>
        </change>
        <change id="gradle-java-independence">
            <api name="general"/>
            <summary>Remove Java Platform dependency.</summary>
            <version major="2" minor="3"/>
            <date year="2020" month="7" day="15"/>
            <author login="lkishalmi"/>
            <compatibility binary="compatible" source="compatible"/>
            <description>
                <p>
                    Due to recent movement and the plan to support Gradle native
                    projects as well in the future the dependency on
                    Java Platform module has been removed.
                </p>
                <p>
                    The removal affects <code><a href="@TOP@/org/netbeans/modules/gradle/api/execute/RunUtils.html#getActivePlatform-java.lang.String-">RunUtils.getActivePlatform</a></code>
                    methods. The method returns a Pair with <code>null</code> as <code>second</code> which
                    indicates a broken Platform. This is for keeping the binary compatibility only.
                    These methods shall be not used at all. There is no
                    replacement planned for these API functions.
                </p>
                <p>
                    Added <code><a href="@TOP@/org/netbeans/modules/gradle/spi/exectute/GradleJavaPlatformProvider.html">GradleJavaPlatformProvider</a></code>
                    which can be put into the project lookup, to be able to specify the JDK
                    to be used for Gradle build execution.
                </p>
            </description>
        </change>
        <change id="gradle-project-trust">
            <api name="general"/>
            <summary>Introduce Trust relationship with Gradle Projects to prevent unintentional Gradle invocation.</summary>
            <version major="2" minor="2"/>
            <date year="2020" month="6" day="24"/>
            <author login="lkishalmi"/>
            <compatibility binary="compatible" source="compatible"/>
            <description>
                <p>
                    Gradle projects are maintaining a trust attribute from now.
                    This trust is based on the NetBeans user directory and the
                    a secret placed in the Gradle Root project directory.
                </p>
                <p>
                    Trusting any project of a multi-project Gradle build means
                    trust all project in that multi-project project, as the
                    trust is placed on the root project.
                </p>
                <p>
                    This change is backported to version 2.0.1 as well.
                </p>
                <p>
                    Added <code><a href="@TOP@/org/netbeans/modules/gradle/api/execute/RunUtils.html#isProjectTrusted-org.netbeans.api.project.Project-boolean-">RunUtils.isProjectTrusted(Project,boolean)</a></code>
                    where plugin can check if a project is trusted or request
                    one time trust with interactive mode.
                </p>
                <p>
                    There is no API/SPI to mark a project trusted/untrusted.
                    Projects are not trusted by default, but become trusted once
                    a priming build is requested or a Gradle task is invoked as
                    a result of an user action.
                </p>
                <p>
                    Added <code><a href="@TOP@/org/netbeans/modules/gradle/spi/GradleSettings.GradleExecutionRule.html">GradleSettings.GradleExecutionRule</a></code>
                    with setter ad getter in <code><a href="@TOP@/org/netbeans/modules/gradle/spi/GradleSettings.html">GradleSettings</a></code>
                    as a global option to how to treat automatic Gradle Execution globally.
                </p>
            </description>
        </change>
        <change id="gradle-tooling-api-split">
            <api name="general"/>
            <summary>Move Gradle Tooling API to a separate module.</summary>
            <version major="2" minor="0"/>
            <date year="2020" month="4" day="4"/>
            <author login="lkishalmi"/>
            <compatibility binary="incompatible" source="compatible"/>
            <description>
                <p>
                    The Gradle Tooling API has been removed from this module to
                    its own into: <code>org.netbeans.modules.libs.gradle</code>
                </p>
                <p>
                    Modules depending on previous versions of this module need
                    an additional dependency on the new library module. The
                    main reason behind this split is that it is easier to do
                    Gradle Tooling API update in the future.
                </p>
                <pre>
                    &lt;dependency&gt;
                        &lt;code-name-base&gt;org.netbeans.modules.libs.gradle&lt;/code-name-base&gt;
                        &lt;compile-dependency/&gt;
                        &lt;run-dependency&gt;
                            &lt;release-version&gt;6&lt;/release-version&gt;
                            &lt;specification-version&gt;6.3&lt;/specification-version&gt;
                        &lt;/run-dependency&gt;
                    &lt;/dependency&gt;
                </pre>
                <p>
                    <b>Note:</b> The specification version of the <code>org.netbeans.modules.libs.gradle</code>
                    module is matching the provided Gradle Tooling API version. The release version number
                    follows the major version.
                </p>
                <p>
                    Besides of the library removal the source code provided in
                    this module are backward compatible.
                </p>
            </description>
            <issue number="NETBEANS-4118"/>
        </change>
        <change id="allow-cancelling-gradle-process">
            <api name="general"/>
            <summary>Added <code>RunUtils.cancelGradle(RunConfig)</code> to allow plugins to cancel an executed Gradle process.</summary>
            <version major="1" minor="4"/>
            <date year="2019" month="10" day="22"/>
            <author login="lkishalmi"/>
            <compatibility source="compatible"/>
            <description>
                <p>
                    Added <code><a href="@TOP@/org/netbeans/modules/gradle/api/execute/RunUtils.html#cancelGradle-org.netbeans.modules.gradle.api.execute.RunConfig-">RunUtils.cancelGradle(RunConfig)</a></code> to allow plugins to cancel an executed Gradle process.
                </p>
            </description>
            <class package="org.netbeans.modules.gradle.api.execute" name="RunUtils"/>
            <issue number="NETBEANS-3279"/>
        </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 projects/projectuiapi/apichanges.xml

        -->
        <head>
            <title>Change History for the Gradle Project API</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 <a href="@org-netbeans-modules-gradle@/index.html">Gradle Project API</a>.</p>

            <!-- The actual lists of changes, as summaries and details: -->
            <hr/>
            <standard-changelists module-code-name="org.netbeans.modules.gradle/0"/>

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

        </body>
    </htmlcontents>

</apichanges>
