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