<?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 href="../../nbbuild/javadoctools/apichanges.xsl" type="text/xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<!-- INFO FOR PEOPLE ADDING CHANGES:
[most of contents snipped - see openide's apichanges for how-to instructions]
<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>
-->

<apichanges>

<!-- First, a list of API names you may use: -->
<apidefs>
        <apidef name="DebuggerCoreAPI">Debugger Core API</apidef>
</apidefs>

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

<changes>
    <change id="Watch_Pin">
        <api name="DebuggerCoreAPI"/>
        <summary>API for pinned Watches</summary>
        <version major="1" minor="54"/>
        <date day="18" month="4" year="2016"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes" deletion="no"/>
        <description>
            A <code>Watch.Pin</code> base interface introduced as a basis
            for specific platform-dependent and location-dependent implementations.
            <code>DebuggerManager.createPinnedwatch()</code> introduced.
        </description>
        <class package="org.netbeans.api.debugger" name="DebuggerManager"/>
        <class package="org.netbeans.api.debugger" name="Watch"/>
        <issue number="258651"/>
    </change>
    <change id="Watch_disableable">
        <api name="DebuggerCoreAPI"/>
        <summary>API for changing enabled state of a Watch</summary>
        <version major="1" minor="36"/>
        <date day="27" month="3" year="2012"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes" deletion="no"/>
        <description>
            Two method are added to Watch class: <code>isEnabled()</code> and <code>setEnabled(boolean)</code>.
            When the enabled state changes, <code>PROP_ENABLED</code> event is fired.
        </description>
        <class package="org.netbeans.api.debugger" name="Watch"/>
        <issue number="209783"/>
    </change>
    <change id="generification">
        <api name="DebuggerCoreAPI"/>
        <summary>Use of some generic types in API; <code>ContextProvider</code> implemented more broadly; <code>DebuggerManager.join</code></summary>
        <version major="1" minor="13"/>
        <date day="1" month="3" year="2008"/>
        <author login="jglick"/>
        <compatibility binary="compatible" source="incompatible" modification="yes" semantic="compatible">
            <p>
                As with any generification, it is possible for old code to no longer compile. E.g.
            </p>
            <pre>List&lt;X&gt; = lookup.lookup(folder, X.class);</pre>
            <p>
                must be changed to:
            </p>
            <pre>List&lt;? extends X&gt; = lookup.lookup(folder, X.class);</pre>
        </compatibility>
        <description>
            <p>
                <code>ContextProvider</code> is now properly generified, and implemented also by:
            </p>
            <ul>
                <li><code>DebuggerEngine</code></li>
                <li><code>DebuggerInfo</code></li>
                <li><code>DebuggerManager</code></li>
                <li><code>Session</code></li>
            </ul>
            <p>
                The new method <code>DebuggerManager.join</code> can be used to merge lookup lists easily.
            </p>
        </description>
        <class package="org.netbeans.api.debugger" name="DebuggerEngine"/>
        <class package="org.netbeans.api.debugger" name="DebuggerInfo"/>
        <class package="org.netbeans.api.debugger" name="DebuggerManager"/>
        <class package="org.netbeans.api.debugger" name="Session"/>
        <issue number="128229"/>
    </change>
    <change id="debugger-dual-actions">
        <api name="DebuggerCoreAPI"/>
        <summary>Support for "dual" actions added.</summary>
        <date day="29" month="4" year="2004"/>
        <author login="jjancura"/>
        <compatibility binary="incompatible" source="incompatible" addition="yes" deletion="yes" modification="yes"/>
        <description>
            According to Debugger UI Specification there are some actions that have two different 
            meanings. for example Step Into action. When some Java Debugger session is running it steps
            into the current method. But if there is no session running it should start a new session
            for Main Project and stop in its main method. Thats why we have to update support for debugger 
            actions. Changes made:
            <ul>
                <li>
                    Support methods for managing and sharing actions has been moved from DebuggerEngine
                    to new class ActionsManager.
                </li>
                <li>
                    Debugger Action Constants has been move from DebuggerEngine to ActionsManager.
                </li>
                <li>
                    New common ancestor of DebuggerManager, Session and Debugger Engine has been 
                    introduced - LookupProvider. From now you can register the same action in differen
                    context levels.
                </li>
                <li>
                    DebuggerManager.getActionsManager () method has been added. You can register 
                    ActionProviders for default root context (managed by DebuggerManager). These actions
                    can be in enabled state even if there is no current DebuggerEngine!
                </li>
                <li>
                    DebuggerEngine parameter of method ActionsProvider.doAction (...) has been removed.
                </li>
            </ul>
        </description>
    </change>
    <change id="DebuggerEngine-synch-start">
        <api name="DebuggerCoreAPI"/>
        <summary>Support for synchronouous start of DebuggerEngines added.</summary>
        <date day="3" month="5" year="2004"/>
        <author login="jjancura"/>
        <compatibility binary="incompatible" source="compatible" modification="yes"/>
        <description>
            <p>
                <code>void DebuggerManager.startDebugging (DebuggerInfo)</code> has been changed to <code>DebuggerEngine[] 
                DebuggerManager.startDebugging (DebuggerInfo)</code>. So it returns array of all DebuggerEngines
                created for given DebuggerInfo.
            </p>
        </description>
    </change>
    <change id="ToggleBreakpointAction-etc.">
        <api name="DebuggerCoreAPI"/>
        <summary>Support for ToggleBreakpointAction added, and some bugfix of Debugger Actions support API.</summary>
        <date day="9" month="5" year="2004"/>
        <author login="jjancura"/>
        <compatibility binary="incompatible" source="incompatible" modification="yes"/>
        <description>
            <p>
                <code>ActionsManager.doAction (...)</code>, 
                <code>ActionsProvider.doAction (...)</code> and 
                <code>ActionsManagerListener.actionPefrormed (...)</code> methods
                will not return boolean any longer. This parameter was unusefull and it was not posible to 
                implement it in some meaningful way.
            </p>
        </description>
    </change>
    <change id="Breakpoint.group.name">
        <api name="DebuggerCoreAPI"/>
        <summary>Support for Breakpoints Group added.</summary>
        <date day="13" month="5" year="2004"/>
        <author login="jjancura"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
            <p>
                Breakpoint.getGroupName (), Breakpoint.setGroupName () methods were added.
                Breakpoint.PROP_GROUP_NAME has been added.
            </p>
        </description>
    </change>
    <change id="ActionsProviderSupport.isEnabled-nonfinal">
        <api name="DebuggerCoreAPI"/>
        <summary>final modifier removed from ActionsProviderSupport.isEnabled.</summary>
        <version major="1" minor="3"/>
        <date day="23" month="11" year="2004"/>
        <author login="jjancura"/>
        <compatibility binary="compatible" source="compatible" modification="yes"/>
        <description>
            <p>
                Having final modifier for this method can be too obstructive in some cases. I had a problem writing tests.
            </p>
        </description>
    </change>
    <change id="ActionsManager-ActionsProvider.postAction">
        <api name="DebuggerCoreAPI"/>
        <summary>Debugger actions can be posted asynchronously.</summary>
        <version major="1" minor="5"/>
        <date day="24" month="8" year="2005"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
            <p>
                Added methods:
                <code>ActionsManager.postAction(Object)</code>, 
                <code>ActionsProvider.postAction(Object, Runnable)</code>,
                These can be used to call and implement asynchronous actions.
            </p>
        </description>
    </change>
    <change id="ActionsManager.ACTION_STEP_OPERATION">
        <api name="DebuggerCoreAPI"/>
        <summary>Support for stepping over operations.</summary>
        <version major="1" minor="9"/>
        <date day="1" month="2" year="2007"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
            <p>
                Added fields:
                <code>ActionsManager.ACTION_STEP_OPERATION</code>, 
                This constant is used in action performer which implements an operation step.
            </p>
        </description>
    </change>
    <change id="Breakpoint.validity">
        <api name="DebuggerCoreAPI"/>
        <summary>Support for breakpoint validity.</summary>
        <version major="1" minor="10"/>
        <date day="21" month="2" year="2007"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
            <p>
                Added fields:
                <code>Breakpoint.PROP_VALIDITY</code> - 
                This constant is used in property change events as a notification about change in validity.<br/>
                <code>Breakpoint.VALIDITY</code> - enumeration of constants for breakpoint validity.
            </p>
            <p>
                Added methods:
                <code>Breakpoint.getValidity()</code>,
                <code>Breakpoint.getValidityMessage()</code>,
                <code>Breakpoint.setValidity()</code> - validity management.
            </p>
        </description>
    </change>
    <change id="Breakpoint.hitCounts">
        <api name="DebuggerCoreAPI"/>
        <summary>Add filter for hit counts to breakpoints.</summary>
        <version major="1" minor="11"/>
        <date day="21" month="5" year="2007"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             To be able to set breakpoint for number of iterations, we need to add a filter for hit counts into Breakpoint API.
             </p>
             <p>
                 Added methods:<br/>
                 <code>Breakpoint.getHitCountFilter()</code>,
                 <code>Breakpoint.getHitCountFilteringStyle()</code>,
                 <code>Breakpoint.setHitCountFilter()</code>.
             </p>
             <p>
                 Added fields:<br/>
                 <code>Breakpoint.PROP_HIT_COUNT_FILTER</code>,
                 <code>Breakpoint.HIT_COUNT_FILTERING_STYLE</code>.
             </p>
        </description>
    </change>

    <change id="PathLookup">
        <api name="DebuggerCoreAPI"/>
        <summary>Lookup improvements and service annotation registration.</summary>
        <version major="1" minor="16"/>
        <date day="2" month="2" year="2009"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             In order to be able to register debugger services on System FileSystem,
             which brings more flexibility and better performance (see also
             <a href="http://www.netbeans.org/issues/show_bug.cgi?id=153093#desc7"/>),
             we add non-recursive content of <code>org.openide.util.Lookups.forPath()</code>
             into debugger lookup.
             Since debugger needs retrieve context-aware services from the lookup,
             <code>ContextAwareService</code> interface is introduced.
             </p>
             <p>
             Annotations are added for easy registration on module layers.
             <code>DebuggerServiceRegistration</code> to register implementations
             of interfaces, <code>*Provider.Registration</code> to register
             implementations of appropriate providers.
             </p>
        </description>
        <class package="org.netbeans.spi.debugger" name="DebuggerServiceRegistration" />
        <class package="org.netbeans.spi.debugger" name="ContextAwareService" />
        <class package="org.netbeans.spi.debugger" name="ContextAwareSupport" />
        <issue number="153093"/>
        <issue number="156687"/>
    </change>

    <change id="PropertiesInitializer">
        <api name="DebuggerCoreAPI"/>
        <summary>Support for providing initial values of properties.</summary>
        <version major="1" minor="17"/>
        <date day="28" month="2" year="2009"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             Properties.Initializer interface introduced to provide initial
             values of properties. This is necessary when properties are
             accessed from more places and it's not practical to copy default
             values to every such location.
             </p>
        </description>
        <class package="org.netbeans.api.debugger" name="Properties" />
        <issue number="158775"/>
    </change>

     <change id="PropertiesListener">
        <api name="DebuggerCoreAPI"/>
        <summary>Support for listening to changes of property values.</summary>
        <version major="1" minor="17"/>
        <date day="28" month="2" year="2009"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             addPropertyChangeListener() and removePropertyChangeListener()
             methods added to Properties class.
             </p>
        </description>
        <class package="org.netbeans.api.debugger" name="Properties" />
        <issue number="158907"/>
    </change>

     <change id="WatchesReordering">
        <api name="DebuggerCoreAPI"/>
        <summary>Support for changing the order of watches.</summary>
        <version major="1" minor="22"/>
        <date day="15" month="12" year="2009"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             createWatch(int index, String expr) and reorderWatches(int[] permutation)
             methods added to DebuggerManager class.<br/>
             These methods are going to be called from WatchesTreeModel when
             watches are reordered.
             </p>
        </description>
        <class package="org.netbeans.api.debugger" name="DebuggerManager" />
        <issue number="178301"/>
    </change>

    <change id="LazyActionRegistration">
        <api name="DebuggerCoreAPI"/>
        <summary>A declarative mechanism to delay creation of action provider instance until a file with specific MIME type becomes active.</summary>
        <version major="1" minor="23"/>
        <date day="11" month="2" year="2010"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             ActionsProvider.Registration annotation is enhanced with two additional
             methods actions() and activateForMIMETypes(). Until a file with the
             listed MIME type is selected in the IDE, the appropriate actions provider
             is left disabled for the given list of actions, without instantiating the
             implementation class.
             </p>
        </description>
        <class package="org.netbeans.spi.debugger" name="ActionsProvider" />
        <issue number="177561"/>
    </change>

    <change id="AddWatchActionProvider">
        <api name="DebuggerCoreAPI"/>
        <summary>It's possible to override New Watch action with a session-specific provider.</summary>
        <version major="1" minor="24"/>
        <date day="23" month="2" year="2010"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             ActionsManager.ACTION_NEW_WATCH constant was added for use by session-specific
             provider of New Watch action. That action invokes an implementation
             of ActionsProvider that is registered for the active debugger session
             and contains ActionsManager.ACTION_NEW_WATCH action.
             </p>
        </description>
        <class package="org.netbeans.api.debugger" name="ActionsManager" />
        <issue number="180558"/>
    </change>
    
    <change id="BreakpointsGrouping">
        <api name="DebuggerCoreAPI"/>
        <summary>Breakpoints group properties.</summary>
        <version major="1" minor="25"/>
        <date day="28" month="2" year="2010"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             Add Breakpoint.getGroupProperties() method, that returns an implementation
             of GroupProperties class with the relevant grouping information
             used by BreakpointsWindow to create hierarchy of breakpoint groups
             </p>
        </description>
        <class package="org.netbeans.api.debugger" name="Breakpoint" />
        <issue number="179759"/>
    </change>

    <change id="DebuggerServiceRegistrations">
        <api name="DebuggerCoreAPI"/>
        <summary>Allow multiple debugger service registrations and position order</summary>
        <version major="1" minor="28"/>
        <date day="10" month="9" year="2010"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             Allow to specify the order of the debugger service registry.
             For the need of being able to define multiple different
             registrations for a single instance, @DebuggerServiceRegistrations
             and ActionsProvider.Registrations annotations are introduced.
             </p>
        </description>
        <class package="org.netbeans.spi.debugger" name="DebuggerServiceRegistration" />
        <class package="org.netbeans.spi.debugger" name="DebuggerServiceRegistrations" />
        <class package="org.netbeans.spi.debugger" name="ActionsProvider" />
        <issue number="190080"/>
    </change>

    <change id="EvaluateAction">
        <api name="DebuggerCoreAPI"/>
        <summary>Evaluate action is made generic, based on action providers.</summary>
        <version major="1" minor="29"/>
        <date day="12" month="11" year="2010"/>
        <author login="mentlicher"/>
        <compatibility binary="compatible" source="compatible" addition="yes"/>
        <description>
             <p>
             Evaluate action is moved from JPDA Debugger into Debugger Core UI module.
             ActionsManager.ACTION_EVALUATE constant was added for use by debugger-specific
             provider (ActionsProvider) of Evaluate action.
             </p>
        </description>
        <class package="org.netbeans.api.debugger" name="ActionsManager" />
        <issue number="191394"/>
    </change>

    <change id="DependentBreakpoints">
        <api name="DebuggerCoreAPI"/>
        <summary>Added a possibility to enable/disable other breakpoints when one is hit.</summary>
        <version major="1" minor="35"/>
        <date day="19" month="12" year="2011"/>
        <author login="mentlicher"/>
        <compatibility addition="yes" source="compatible" binary="compatible"/>
        <description>
            Four methods are added to the Breakpoint class, that allow to
            get or set a set of breakpoints, that are enabled or disabled when
            the breakpoint is hit. One test method is provided, which determines
            if the dependent breakpoints are supported by the implementation.
            <p>
                Added methods:<br/>
                <code>Breakpoint.canHaveDependentBreakpoints()</code>,
                <code>Breakpoint.getBreakpointsToEnable()</code>,
                <code>Breakpoint.setBreakpointsToEnable()</code>,
                <code>Breakpoint.getBreakpointsToDisable()</code>,
                <code>Breakpoint.setBreakpointsToDisable()</code>.
            </p>
        </description>
        <class package="org.netbeans.api.debugger" name="Breakpoint" />
        <issue number="197707"/>
    </change>
    
    <change id="SessionBridge">
        <api name="DebuggerCoreAPI"/>
        <summary>A session bridge introduced to handle mixed languages debugging.</summary>
        <version major="1" minor="48"/>
        <date day="8" month="9" year="2014"/>
        <author login="mentlicher"/>
        <compatibility addition="yes" source="compatible" binary="compatible"/>
        <description>
            <code>SessionBridge</code> class introduced. This class allows to
            suggest that some debug action can be handled by a different debugging
            session. The handlers can be registered via implementations of
            <code>SessionChanger</code> interface.
        </description>
        <class package="org.netbeans.api.debugger" name="SessionBridge" />
        <issue number="246819"/>
    </change>

    <change id="BreakpointsDeactivation">
        <api name="DebuggerCoreAPI"/>
        <summary>A mechanism for activation/deactivation of engine-related breakpoints.</summary>
        <version major="1" minor="51"/>
        <date day="30" month="4" year="2015"/>
        <author login="mentlicher"/>
        <compatibility addition="yes" source="compatible" binary="compatible"/>
        <description>
            API class <code>ActiveBreakpoints</code> and SPI interface
            <code>BreakpointsActivationProvider</code> introduced. These classes
            handle an activation/deactivation of engine-related breakpoints,
            which is independent on their enabled/disabled state.
        </description>
        <class package="org.netbeans.api.debugger" name="ActiveBreakpoints" />
        <class package="org.netbeans.spi.debugger" name="BreakpointsActivationProvider" />
        <issue number="242800"/>
    </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 xml/api/doc/changes/apichanges.xml

-->
    <head>
      <title>Debugger Core API changes by date</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 Debugger Core APIs. Please ask on the 
    <code>nbdev@netbeans.org</code>
    mailing list if you have any questions about the details of a
    change, or are wondering how to convert existing code to be compatible.
</p>

      <hr/><standard-changelists module-code-name="org.netbeans.api.debugger/1"/>

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

    </body>
  </htmlcontents>
</apichanges>
