<?xml version="1.0" encoding="UTF-8"?>
<!-- Search for CHANGEME in this document when copying and using it: -->
<!--
    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">Jump to</apidef>
        <!-- etc. -->
    </apidefs>

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

    <changes>
        <change id="no-friends">
            <api name="general"/>
            <summary>Opening the module to public</summary>
            <version major="1" minor="63"/>
            <date day="29" month="2" year="2020"/>
            <author login="jtulach"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Opening the module to everyone.
            </description>
        </change>
        <change id="NameMatcher_constants">
            <api name="general"/>
            <summary>Added <code>NameMatcher.NONE</code> and <code>NameMatcher.ALL</code></summary>
            <version major="1" minor="53"/>
            <date day="29" month="2" year="2016"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Added <code>NameMatcher.NONE</code> and <code>NameMatcher.ALL</code> which matches no and all items.
            </description>
            <class package="org.netbeans.spi.jumpto.support" name="NameMatcher"/>
        </change>
        <change id="AsyncDescriptor">
            <api name="general"/>
            <summary>Added <code>AsyncDescriptor</code> which allows descriptor to be fully calculated on background</summary>
            <version major="1" minor="49"/>
            <date day="18" month="5" year="2015"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Added <code>AsyncDescriptor</code> which allows descriptor to be fully calculated on background.
                The <code>AsyncDescriptor</code> allows intformation to be computed on demand just for visible items.
            </description>
            <class package="org.netbeans.spi.jumpto.support" name="AsyncDescriptor"/>
            <class package="org.netbeans.spi.jumpto.support" name="DescriptorChangeListener"/>
            <class package="org.netbeans.spi.jumpto.support" name="DescriptorChangeEvent"/>
        </change>
        <change id="SymbolDescriptor-simpleName">
            <api name="general"/>
            <summary>Added method <code>getSimpleName</code> to <code>SymbolDescriptor</code></summary>
            <version major="1" minor="48"/>
            <date day="29" month="4" year="2015"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Added method <code>getSimpleName</code> to <code>SymbolDescriptor</code> returning the raw symbol
                name without parameter names or types.
            </description>
            <class package="org.netbeans.spi.jumpto.symbol" name="SymbolDescriptor"/>
        </change>
        <change id="TypeProvider-Result-setHighlightText">
            <api name="general"/>
            <summary>Added method <code>setHighlightText</code> to <code>TypeProvider.Result</code> to allow <code>TypeProvider</code> to set text to highlight.</summary>
            <version major="1" minor="38"/>
            <date day="20" month="5" year="2012"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description> By default the highlight text matches the text to search and <code>TypeProvider</code> has no need to do anything.
            But when the <code>TypeProvider</code> changes the text to search and uses a part of it just as a restriction it has to specify
            the new search text. For example Java TypeProvider splits the following text to search "java.lang.Str" to restriction for package
            "java.lang" and a new search text "Str". In order to let the infrastructure correctly highlight found elements the Java TypeProvider
            needs to call <code>Result.setHighlightText</code>.
            </description>
            <class package="org.netbeans.spi.jumpto.type" name="TypeProvider"/>
        </change>
        <change id="SymbolProvider-Result-setHighlightText">
            <api name="general"/>
            <summary>Added method <code>setHighlightText</code> to <code>SymbolProvider.Result</code> to allow <code>SymbolProvider</code> to set text to highlight.</summary>
            <version major="1" minor="37"/>
            <date day="17" month="5" year="2012"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description> By default the highlight text matches the text to search and <code>SymbolProvider</code> has no need to do anything.
            But when the <code>SymbolProvider</code> changes the text to search and uses a part of it just as a restriction it has to specify
            the new search text. For example Java SymbolProvider splits the following text to search "*Util.toF" to restriction regexp for
            type "*Util" and a new search text "toF". In order to let the infrastructure correctly highlight found elements the Java SymbolProvider
            needs to call <code>Result.setHighlightText</code>.
            </description>
            <class package="org.netbeans.spi.jumpto.symbol" name="SymbolProvider"/>
            <issue number="220300"/>
        </change>
        <change id="TypeDescriptor-fileDisplayPath">
            <api name="general"/>
            <summary>Added <code>TypeDescriptor.getFileDisplayPath</code> and <code>SymbolDescriptor.getFileDisplayPath</code> methods to return display path of the file.</summary>
            <version major="1" minor="36"/>
            <date day="9" month="5" year="2012"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Added <code>TypeDescriptor.getFileDisplayPath</code> and <code>SymbolDescriptor.getFileDisplayPath</code> methods to
                return a display path of the file. The default implementation just delegates to <code>FileUtil.getFileDisplayName</code> but it can
                be overriden by more effective implementation when possible.
            </description>
            <class package="org.netbeans.spi.jumpto.type" name="TypeDescriptor"/>
            <class package="org.netbeans.spi.jumpto.symbol" name="SymbolDescriptor"/>
            <issue number="225453"/>
        </change>
        <change id="FileDescriptor-fileDisplayPath">
            <api name="general"/>
            <summary>Added <code>FileDescriptor.getFileDisplayPath</code> method to return display path of the file.</summary>
            <version major="1" minor="33"/>
            <date day="12" month="12" year="2012"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Added <code>FileDescriptor.getFileDisplayPath</code> method to return a display path of the file.
                The default implementation just delegates to <code>FileUtil.getFileDisplayName</code> but it can
                be overriden by more effective implementation when possible.
            </description>
            <class package="org.netbeans.spi.jumpto.file" name="FileDescriptor"/>
            <issue number="223668"/>
        </change>
        <change id="FileProvider-Context-lineNumber">
            <api name="general"/>
            <summary>Added <code>FileProvider.Context.getLineNumber</code> method to return the preferred line</summary>
            <version major="1" minor="30"/>
            <date day="27" month="8" year="2012"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Added <code>FileProvider.Context.getLineNumber</code> method to return the preferred line on which the document
                should be opened. The <code>FileProvider</code>s which are using custom <code>FileDescription</code> should use
                this method to open the selected file on preferred line. The <code>FileProvider</code>s which are using
                <code>FileObject</code>s are handled automatically.
            </description>
            <class package="org.netbeans.spi.jumpto.file" name="FileProvider"/>
            <issue number="217050"/>
        </change>
        <change id="Prefill-initial-text-in-type-broser">
            <api name="general"/>
            <summary>Overloading TypeBrowser.browse method to allow prefilling of initial type name</summary>
            <version major="1" minor="25"/>
            <date day="20" month="7" year="2011"/>
            <author login="jlahoda"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Adding an overload to TypeBrowser.browse method that allows to specify the initial type name that should appear in the Go to Type dialog.
            </description>
            <class package="org.netbeans.api.jumpto.type" name="TypeBrowser"/>
            <issue number="200163"/>
        </change>
        <change id="Wildcard-to-Regexp">
            <api name="general"/>
            <summary>Added a method converting Go To Type (File) wildcards into regexp</summary>
            <version major="1" minor="20"/>
            <date day="21" month="10" year="2010"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Added a method converting Go To Type (File) wildcards into string accepted by java.util.regex.Pattern
            </description>
            <class package="org.netbeans.spi.jumpto.support" name="NameMatcherFactory"/>
            <issue number="191145"/>
        </change>
        <change id="Support">
            <api name="general"/>
            <summary>Added support SPI to implement name filters</summary>
            <version major="1" minor="17"/>
            <date day="6" month="5" year="2010"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                Added support SPI to implement common filters used by Go To Type, Go To Symbol,
                Go To File.
            </description>
            <class package="org.netbeans.spi.jumpto.support" name="NameMatcherFactory"/>
            <class package="org.netbeans.spi.jumpto.support" name="NameMatcher"/>
            <issue number="185168"/>
        </change>
        <change id="GoToFile">
            <api name="general"/>
            <summary>Added SPI for Go to File dialog</summary>
            <version major="1" minor="15"/>
            <date day="7" month="4" year="2010"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                 Added SPI to allow friend modules to participate on searching files
                 in the Go To File dialog. The supplied FileProvider can handle file
                 search in recognized source groups.
            </description>
            <class package="org.netbeans.spi.jumpto.file" name="FileProviderFactory"/>
            <class package="org.netbeans.spi.jumpto.file" name="FileProvider"/>
            <issue number="182884"/>
        </change>
        <change id="GoToSymbol">
            <api name="general"/>
            <summary>Added SPI for Go to Symbol dialog</summary>
            <version major="1" minor="7"/>
            <date day="1" month="7" year="2008"/>
            <author login="tzezula"/>
            <compatibility addition="yes">
            </compatibility>
            <description>
                 Added SPI to provide content of the for Go to Symbol dialog.
            </description>
            <issue number="138345"/>
        </change>

        <change id="Provider.Result.pendingResult">
            <api name="general"/>
            <summary>Added method (Type|Symbol)Provider.Result.pendingResult()</summary>
            <version major="1" minor="14"/>
            <date day="4" month="11" year="2009"/>
            <author login="pflaska"/>
            <compatibility addition="yes"/>
            <description>
                Added method TypeProvider.Result.pendingResult() and
                SymbolProvider.Result.pendingResult()  to notify
                provider's caller that the provider should be called again.
            </description>
            <issue number="175998"/>
        </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 CHANGEME/apichanges.xml

-->
    <head>
      <title>Change History for the Jump to 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 Jump to API<!--</a>-->.</p>

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

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

    </body>
  </htmlcontents>

</apichanges>
