<?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="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>
<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>
<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>
