<?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="gradle.java.api">Gradle Java Project API</apidef>
        <!-- etc. -->
    </apidefs>

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

    <changes>
        <change id="sourceset-lang-output">
            <api name="gradle.java.api"/>
            <summary>Support for per-language output directories</summary>
            <version major="1" minor="19"/>
            <date day="28" month="6" year="2022"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes" deprecation="no"/>
            <description>
                Each language plugin typically generates output to a specific directory. The mapping
                allows more precise output-to-source mapping.
            </description>
            <class package="org.netbeans.modules.gradle.java.api" name="GradleJavaSourceSet"/>
        </change>
        <change id="nested-class-locations">
            <api name="gradle.java.api"/>
            <summary>Location can represent nested classes</summary>
            <version major="1" minor="17"/>
            <date day="18" month="2" year="2022"/>
            <author login="ratcashdev"/>
            <compatibility semantic="compatible" deprecation="yes"/>
            <description>
                <code><a href="@TOP@/org/netbeans/modules/gradle/java/api/output/Location.html">Location</a></code>
                is now capabe to represent java code location inside nested classes as well.
            </description>
            <class package="org.netbeans.modules.gradle.java.api.output" name="Location"/>
            <issue number="NETBEANS-6041"/>
        </change>
        <change id="gradle-7.0-deprecation">
            <api name="gradle.java.api"/>
            <summary>Deprecating Gradle 7.0 removed API-s</summary>
            <version major="1" minor="13"/>
            <date day="10" month="4" year="2021"/>
            <author login="lkishalmi"/>
            <compatibility semantic="incompatible" deprecation="yes"/>
            <description>
                <code><a href="@TOP@/org/netbeans/modules/gradle/java/api/GradleJavaSourceSet.html">GradleJavaSourceSet</a></code> 
                methods <code>getCompileConfigurationName()</code> and <code>getRuntimeConfigurationName()</code> 
                were deprecated as Gradle 7.0 does no longer supports them. They return <code>null</code> on Gradle 7.0.
            </description>
            <class package="org.netbeans.modules.gradle.java.api" name="GradleJavaSourceSet"/>
            <issue number="NETBEANS-5541"/>            
        </change>
        <change id="run.argument.properties">
            <api name="gradle.java.api"/>
            <summary>Support for explicit commandline arguments</summary>
            <version major="1" minor="12"/>
            <date day="27" month="3" year="2021"/>
            <author login="sdedic"/>
            <compatibility semantic="compatible" addition="yes"/>
            <description>
                Gradle Java interpolate <code>javaExec.jvmArgs</code> and <code>javaExec.args</code>
                tokens in action mapping that can be used to pass explicit JVM and application
                parameters to user process started by Gradle build. For more details, see 
                <a href="@TOP@/org/netbeans/modules/gradle/java/api/ProjectActions.html#TOKEN_JAVAEXEC_JVMARGS">ProjectActions.TOKEN_JAVAEXEC_JVMARGS</a>
            </description>
            <class package="org.netbeans.modules.gradle.java.api" name="ProjectActions"/>
            <issue number="NETBEANS-5482"/>
        </change>
        <change>
            <api name="gradle.java.api"/>
            <summary>Support Kotlin Source Directories</summary>
            <version major="1" minor="15"/>
            <date day="22" month="11" year="2020"/>
            <author login="jpesek"/>
            <compatibility addition="yes"/>
            <description>
                Sourcsets introduce a new SourceType called KOTLIN
                It is possible to retrieve the kotlin source directories
                form a GradleJavaSourceSet from now.
            </description>
            <class package="org.netbeans.modules.gradle.java.api" name="GradleJavaSourceSet"/>
            <issue number="NETBEANS-5050"/>
        </change>
        <change>
            <api name="gradle.java.api"/>
            <summary>Support Generated Source Directories</summary>
            <version major="1" minor="8"/>
            <date day="5" month="7" year="2020"/>
            <author login="lkishalmi"/>
            <compatibility addition="yes"/>
            <description>
                Sourcsets introduce a new SourceType called GENERATED.
                It is possible to retrieve the generated source directories
                form a GradleJavaSourceSet from now.
            </description>
            <class package="org.netbeans.modules.gradle.java.api" name="GradleJavaSourceSet"/>
            <issue number="NETBEANS-4278"/>
        </change>
        <change>
            <api name="gradle.java.api"/>
            <summary>Compiler arguments are accessible for SourceSet-s and minor enhancements</summary>
            <version major="1" minor="4"/>
            <date day="16" month="9" year="2019"/>
            <author login="lkishalmi"/>
            <compatibility addition="yes"/>
            <description>
                Sourcsets can return the used compiler arguments on it's default
                compiler tasks for Java, Groovy and Scala as well.
            </description>
            <class package="org.netbeans.modules.gradle.java.api" name="GradleJavaSourceSet"/>
            <issue number="NETBEANS-2941"/>
        </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 Java 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-java@/index.html">Gradle Java Project API</a>.</p>

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

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

        </body>
    </htmlcontents>

</apichanges>
