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

-->
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">
<apichanges>
<apidefs>
    <apidef name="javasource_base">Java Source API</apidef>
</apidefs>
<changes>
    <change id="ModuleImports">
        <api name="javasource_base" />
        <summary>API Support for module imports</summary>
        <version major="1" minor="2.79"/>
        <date day="1" month="6" year="2025"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Adding TreeMaker.ImportModule and ElementUtilities.transitivelyExportedPackages
                to support module imports.
        </description>
        <class name="TreeMaker" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeMaker.ClassPermits">
        <api name="javasource_base" />
        <summary>Adding TreeMaker.Class overload that takes permitted subclasses</summary>
        <version major="1" minor="2.76"/>
        <date day="28" month="11" year="2024"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Adding TreeMaker.Class overload that allows to specify the permitted subclasses.
        </description>
        <class name="TreeMaker" package="org.netbeans.api.java.source"/>
    </change>
    <change id="SourceUtils.classNameFor-nestedClass">
        <api name="javasource_base" />
        <summary>SourceUtils.classNameFor nested classes support</summary>
        <version major="1" minor="2.74"/>
        <date day="18" month="12" year="2024"/>
        <author login="petrovic-d"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                SourceUtils.classNameFor support for nested classes.
        </description>
        <class name="SourceUtils" package="org.netbeans.api.java.source"/>
    </change>
    <change id="SourceUtils.classNameFor">
        <api name="javasource_base" />
        <summary>Adding SourceUtils.classNameFor</summary>
        <version major="1" minor="2.73"/>
        <date day="5" month="12" year="2024"/>
        <author login="dbalek"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Adding SourceUtils.classNameFor.
        </description>
        <class name="SourceUtils" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeMaker.RawText">
        <api name="javasource_base" />
        <summary>Adding TreeMaker.RawText</summary>
        <version major="1" minor="2.71"/>
        <date day="14" month="10" year="2024"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Adding TreeMaker.RawText.
        </description>
        <class name="TreeMaker" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeMaker.RecordComponent">
        <api name="javasource_base" />
        <summary>Adding TreeMaker.RecordComponent</summary>
        <version major="1" minor="2.70.0"/>
        <date day="20" month="8" year="2023"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Adding TreeMaker.RecordComponent and ElementUtilities.getLinkedRecordElements.
        </description>
        <class name="TreeMaker" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeMaker.StringTemplate">
        <api name="javasource_base" />
        <summary>Adding TreeMaker.StringTemplate</summary>
        <version major="1" minor="2.65.0"/>
        <date day="3" month="11" year="2023"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Adding TreeMaker.StringTemplate
        </description>
        <class name="TreeMaker" package="org.netbeans.api.java.source"/>
    </change>
    <change id="SourceUtils.getFile">
        <api name="javasource_base" />
        <summary>Source file name for Element</summary>
        <version major="1" minor="2.60"/>
        <date day="10" month="1" year="2023"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            It is possible to hint <code>SourceUtils.getFile</code> list
            of file names to searh for. There is also <code>SourceUtils.findSourceFileName</code>
            to obtain name of file for an <code>Element</code>.
        </description>
        <class name="SourceUtils" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeUtilities.isClassFile">
        <api name="javasource_base" />
        <summary>Adding TreeUtilities.isExpressionStatement(ExpressionTree)</summary>
        <version major="1" minor="2.56"/>
        <date day="23" month="3" year="2021"/>
        <author login="dbalek"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Adding TreeUtilities.isExpressionStatement(ExpressionTree).
        </description>
        <class name="TreeUtilities" package="org.netbeans.api.java.source"/>
    </change>
    <change id="SourceUtils.isClassFile">
        <api name="javasource_base" />
        <summary>Adding SourceUtils.isClassFile(FileObject)</summary>
        <version major="1" minor="2.51"/>
        <date day="12" month="5" year="2021"/>
        <author login="dbalek"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Adding SourceUtils.isClassFile(FileObject).
        </description>
        <class name="SourceUtils" package="org.netbeans.api.java.source"/>
    </change>
    <change id="SourceUtils.forceSource">
        <api name="javasource_base" />
        <summary>Adding SourceUtils.forceSource(CompilationController, FileObject)</summary>
        <version major="1" minor="2.46"/>
        <date day="9" month="3" year="2020"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Adding SourceUtils.forceSource(CompilationController, FileObject).
        </description>
        <class name="SourceUtils" package="org.netbeans.api.java.source"/>
    </change>
    <change id="CodeStyle.parensAroundSingularLambdaParam">
        <api name="javasource_base" />
        <summary>CodeStyle.parensAroundSingularLambdaParam() added</summary>
        <version major="1" minor="2.45"/>
        <date day="8" month="2" year="2020"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Method CodeStyle.parensAroundSingularLambdaParam() has been added.
        </description>
        <class name="CodeStyle" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeMaker.SwitchExpression">
        <api name="javasource_base" />
        <summary>Creates a new SwitchExpressionTree</summary>
        <version major="1" minor="2.41.0"/>
        <date day="27" month="2" year="2019"/>
        <author login="vikasprabhakar"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
                Creates a new SwitchExpressionTree.
        </description>
        <class name="TreeMaker" package="org.netbeans.api.java.source"/>
    </change>
    <change id="Matcher.setKeepSyntheticTrees">
        <api name="javasource_base"/>
        <summary>Adding Matcher.setKeepSyntheticTrees method</summary>
        <version major="1" minor="2.40"/>
        <date day="7" month="12" year="2018"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Added Matcher.setKeepSyntheticTrees method, that allows to keep synthetically
            generated variables mapping in the outgoing variables.
        </description>
        <class name="Matcher" package="org.netbeans.api.java.source.matching"/>
    </change>
    <change id="TreeMaker.Case">
        <api name="javasource_base"/>
        <summary>Adding case-related overload to TreeMaker</summary>
        <version major="1" minor="2.39"/>
        <date day="6" month="9" year="2018"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Added TreeMaker.CaseMultipleLabels(List&lt;? extends ExpressionTree&gt; patterns, List&lt;? extends StatementTree&gt; statements) and
            TreeMaker.Case(List&lt;? extends ExpressionTree&gt; patterns, Tree body) overloads.
        </description>
        <class name="TreeUtilities" package="org.netbeans.api.java.source"/>
    </change>
    <change id="BuildArtifactMapper.isCompileOnSaveSupported">
        <api name="javasource_base"/>
        <summary>Check the var type variable in given tree path.</summary>
        <version major="1" minor="2.32"/>
        <date day="20" month="4" year="2018"/>
        <author login="jlahoda"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Added BuildArtifactMapper.isCompileOnSaveSupported method, which
            checks if compile on save is suported in the current configuration.
        </description>
        <class name="TreeUtilities" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeUtilities.isTreeHasError">
        <api name="javasource_base"/>
        <summary>Check the tree has compile error in given collection of errors.</summary>
        <version major="1" minor="2.37"/>
        <date day="18" month="7" year="2018"/>
        <author login="vikasprabhakar"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Check the tree has compile error in given collection of errors.
        </description>
        <class name="TreeUtilities" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeUtilities.isVarType">
        <api name="javasource_base"/>
        <summary>Check the var type variable in given tree path.</summary>
        <version major="1" minor="2.31"/>
        <date day="27" month="3" year="2018"/>
        <author login="vikasprabhakar"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Check the var type variable in given tree path.
        </description>
        <class name="TreeUtilities" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeUtilities.isEndOfCompoundVariableDeclaration">
        <api name="javasource_base"/>
        <summary>Check the tree is the end of compound declaration.</summary>
        <version major="1" minor="2.33"/>
        <date day="3" month="5" year="2018"/>
        <author login="vikasprabhakar"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Check the tree end with comma.
        </description>
        <class name="TreeUtilities" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeUtilities.isPartOfCompoundVariableDeclaration">
        <api name="javasource_base"/>
        <summary>Check the tree is the end of compound declaration.</summary>
        <version major="1" minor="2.34"/>
        <date day="14" month="5" year="2018"/>
        <author login="arusinha"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Check whether tree is part of compound declaration.
        </description>
        <class name="TreeUtilities" package="org.netbeans.api.java.source"/>
    </change>
    <change id="ElementHandle.createModuleElementHandle">
        <api name="javasource_base"/>
        <summary>Added a method to create an <code>ElementHandle</code> for module</summary>
        <version major="1" minor="2.26"/>
        <date day="17" month="1" year="2017"/>
        <author login="tzezula"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Added a method to create a module <code>ElementHandle</code> from a module name.
        </description>
        <class name="ElementHandle" package="org.netbeans.api.java.source"/>
    </change>
    <change id="TreeMaker.module">
        <api name="javasource_base"/>
        <summary>Added methods to generate/modify the module-info.java files</summary>
        <version major="1" minor="2.23"/>
        <date day="4" month="10" year="2016"/>
        <author login="dbalek"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Added methods to generate/modify the module-info.java files
        </description>
        <class name="TypesEvent" package="org.netbeans.api.java.source"/>
    </change>    
    <change id="TypesEvent.module">
        <api name="javasource_base"/>
        <summary>Added an information about changes in the module-info</summary>
        <version major="1" minor="2.23"/>
        <date day="4" month="10" year="2016"/>
        <author login="tzezula"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Added an information about changes in the module-info.
        </description>
        <class name="TypesEvent" package="org.netbeans.api.java.source"/>
    </change>    
    <change id="TypeUtilities.getDenotableType">
        <api name="javasource_base"/>
        <summary>Provide type suitable for declaration in source</summary>
        <version major="1" minor="2.17"/>
       <date day="16" month="5" year="2016"/>
        <author login="sdedic"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Support method which allows to infer a type suitable for use in symbol
            declaration in the source was added.
        </description>
        <class name="TypeUtilities" package="org.netbeans.api.java.source"/>
        <issue number="262073"/>
    </change>
    <change id="utilities.findVisibleElements">
        <api name="javasource_base"/>
        <summary>List elements with their definining Scope</summary>
        <version major="1" minor="2.16"/>
        <date day="31" month="5" year="2016"/>
        <author login="sdedic"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Allows to enumerate Elements matching passed <code>ElementFilter</code> according
            to hiding and inheritance rules. The method may be useful to list elements matching certain
            criteria, or to check whether an element exists and find what class/method defined it.
        </description>
        <class name="ElementUtilities" package="org.netbeans.api.java.source"/>
        <issue number="262281"/>
    </change>
    <change id="utilities.implementAndOverride.defaultMethods">
        <api name="javasource_base"/>
        <summary>Allow to return also unimplemented default methods</summary>
        <version major="1" minor="2.15"/>
        <date day="10" month="5" year="2016"/>
        <author login="sdedic"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                <code>findUnimplementedMethods</code> and <code>findOverridableMethods</code>
                work better with interface default methods: they are treated as implemented,
                but overridable.
            </p>
            <p>
                Allow <code>ElementUtilities.findUnimplementedMethods</code> enumerate
                also default methods whose implementations are not provided by class or
                superclasses.
            </p>
        </description>
        <class name="ElementUtilities" package="org.netbeans.api.java.source"/>
        <issue number="258981"/>
    </change>
    <change id="generator.insert.caretlocation">
        <api name="javasource_base"/>
        <summary>Code Generator uses caret location to insert members</summary>
        <version major="1" minor="2.11"/>
        <date day="5" month="10" year="2015"/>
        <author login="ralphbenjamin"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Added an overloaded method to Code Generator should to include the
            caret location when inserting members. This will be used when the
            codestyle is CodeStyle.InsertionPoint.CARET_LOCATION.
        </description>
        <class name="CodeStyle" package="org.netbeans.api.java.source"/>
        <issue number="255214"/>
    </change>
    <change id="classindex.searchkind.lambda">
        <api name="javasource_base"/>
        <summary>ClassIndex SearchKind extended by FUNCTIONAL_IMPLEMENTORS</summary>
        <version major="1" minor="2.9"/>
        <date day="23" month="9" year="2015"/>
        <author login="tzezula"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Added a possibility to <code>ClassIndex</code> to search a lambda
            implementations.
        </description>
        <class name="ClassIndex" package="org.netbeans.api.java.source"/>
        <issue number="255393"/>
    </change>
    <change id="classindex.resources.binaryroots">
        <api name="javasource_base"/>
        <summary>ClassIndex returns resources from binaryroots</summary>
        <version major="1" minor="2.6"/>
        <date day="27" month="6" year="2015"/>
        <author login="ralphbenjamin"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            ClassIndex holds information from different types of roots. Added a
            parameter to ClassIndex#getResources to specify which roots to use
            for its results.
        </description>
        <class name="ClassIndex" package="org.netbeans.api.java.source"/>
        <issue number="252992"/>
    </change>
    <change id="generator.sort.dependencies">
        <api name="javasource_base"/>
        <summary>Code Generator uses dependencies between fields</summary>
        <version major="1" minor="2.2"/>
        <date day="9" month="2" year="2015"/>
        <author login="sdedic"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            Proper textual order of members should be used
            when inserting a field or class/interface initializer. The analysis
            could be optionally turned off.
        </description>
        <class name="CodeStyle" package="org.netbeans.api.java.source"/>
        <issue number="249199"/>
    </change>
    <change id="remove.openide.text">
        <api name="javasource_base"/>
        <summary>Remove dependency on Openide Text API</summary>
        <version major="1" minor="1"/>
        <date day="25" month="5" year="2014"/>
        <author login="sdedic"/>
        <compatibility modification="yes" binary="compatible" source="incompatible"/>
        <description>
            <p>
                OpenIDE Text API dependencies are removed, affecting <code>ModificationResult.Difference</code>
                API class, whose interface <b>changed</b> incompatibly. The class now returns
                <code>java.swing.text.Position</code> instead of <code>org.openide.text.PositionRef</code>
                for the start and end positions.
            </p>
            <p>
                For binary compatibility, an additional module <code>java.source.compat8</code> was created,
                which provides compatible method that still returns <code>PositionRef</code>
            </p>
        </description>
        <class name="ModificationResult" package="org.netbeans.api.java.source"/>
        <issue number="244744"/>
    </change>
    <change id="server.is.free">
        <api name="javasource_base"/>
        <summary>Desktop independent parts of the Java Source module extracted</summary>
        <version major="1" minor="0"/>
        <date day="30" month="4" year="2014"/>
        <author login="dbalek"/>
        <compatibility modification="yes" addition="yes" binary="compatible" source="incompatible">
        </compatibility>
        <description>
            <p>
                Runtime compatibility remains, compile time compatibility is
                mostly preserved too. It is however recommended to upgrade
                dependencies of client modules. Try running
                <code>ant fix-dependencies</code> in your Ant module.
            </p>
        </description>
    </change>
    <change id="TreeUtilities.getBreakContinueTargetTree">
        <api name="javasource_base" />
        <summary>Find the target of Break or Continue statement</summary>
        <version major="1" minor="2.40.0"/>
        <date day="22" month="1" year="2019"/>
        <author login="sarveshkesharwani"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                Find the target of <code>break</code> or <code>continue</code> 
                statement. Target is of type Tree here.
            </p>
        </description>
        <class name="TreeUtilities" package="org.netbeans.api.java.source"/>
    </change>
    
    <change id="TreeMaker.BindingPattern">
        <api name="javasource_base" />
        <summary>Added new method for getting Tree using VariableTree type</summary>
        <version major="12" minor="4"/>
        <date day="23" month="3" year="2021"/>
        <author login="singh-akhilesh"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                Regarding the JEP 394 (finalization of pattern matching for instanceof in JDK 16).
                The shape of the BindingPatternTree has changed; the BindingPatternTree does not have a name and type, but rather a VariableTree.
            </p>
        </description>
        <class name="TreeMaker" package="org.netbeans.api.java.source"/>
    </change>
</changes>
<htmlcontents>
<head>
<title>Change History for the Base Java Source API</title>
</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>
<ul>
<li>The <code>release41</code> branch was made on Apr 03 '05 for use in the NetBeans 4.1 release.
Specification versions: 6.0 begins after this point.</li>
<li>The <code>release40</code> branch was made on Nov 01 '04 for use in the NetBeans 4.0 release.
Specification versions: 5.0 begins after this point.</li>
</ul>
<hr/>
<standard-changelists module-code-name="$codebase"/>
<hr/>
<p>@FOOTER@</p>
</body>
</htmlcontents>
</apichanges>
