<?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="JavaHintsSPI">Java Hints SPI</apidef>
    </apidefs>
    <changes>
        <change id="JavaFixUtilities.isPrimary">
            <api name="JavaHintsSPI"/>
            <summary>Added JavaFixUtilities.isPrimary() utility</summary>
            <version major="1" minor="31"/>
            <date day="15" month="1" year="2018"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    The utility method JavaFixUtilities.isPrimary() was added.
                    This API checks whether a specified tree can be used in
                    places where a Primary expression is required.
                </p>
            </description>
        </change>
        <change id="Hint.minSourceVersion">
            <api name="JavaHintsSPI"/>
            <summary>Hint can specify minimum source version for operation</summary>
            <version major="1" minor="28"/>
            <date day="24" month="5" year="2015"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Certain hints generate source code following newer language specifications.
                    A hint may declare <code>minSourceVersion</code> in its <code>@Hint</code>
                    annotation to specify a minimum source version. Such hint will be never
                    invoked for files configured for earlier source level.
                </p>
            </description>
        </change>
        <change id="TriggerOptions">
            <api name="JavaHintsSPI"/>
            <summary>Hint can choose to trigger for guarded code</summary>
            <version major="1" minor="27"/>
            <date day="27" month="7" year="2015"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Hints triggered by Tree.Kind are not invoked for Trees which are
                    protected from editing (i.e. Form Builder guarded blocks). Hint implementor
                    can opt to be triggered even for such code, in order to e.g. collect
                    data.
                </p>
            </description>
        </change>
        <change id="EnhancedJavaFix">
            <api name="JavaHintsSPI"/>
            <summary>Added ability to specify sort text for JavaFix</summary>
            <version major="1" minor="18"/>
            <date day="14" month="7" year="2013"/>
            <author login="jlahoda"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Adding to new constructors to <code>JavaFix</code> to define
                    the sort text for the fix.
                </p>    
            </description>
        </change>
        <change id="ProjectHintsJava">
            <api name="JavaHintsSPI"/>
            <summary>Defining system filesystem folder for per-project Java hints customizers</summary>
            <version major="1" minor="16"/>
            <date day="24" month="4" year="2013"/>
            <author login="jlahoda"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Defining <code>Project/hints/java-based</code> folder, where provider for
                    hints customizers for Java-based projects should be stored.
                </p>    
            </description>
<!--            <issue number="227959"/>-->
        </change>
        <change id="IntegerOption">
            <api name="JavaHintsSPI"/>
            <summary>Added support for integer options. Hints can be declared to appear only in inspect &amp; transform</summary>
            <version major="1" minor="14"/>
            <date day="3" month="4" year="2013"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added declarative support for integer options. <code>@IntegerOption</code> can
                    be used with option name field, similar to <code>@BooleanOption</code>.
                </p>    
                <p>
                    An option was added to <code>Hint.Options</code>, so that hint can declare
                    to be only shown in Inspect &amp; transform dialog. Useful for computation-intensive
                    hints, which should only run on demand.
                </p>    
            </description>
            <class package="org.netbeans.spi.java.hints" name="IntegerOption"/>
            <class package="org.netbeans.spi.java.hints" name="Hint"/>
            <issue number="227822"/>
            <issue number="227959"/>
        </change>
        <change id="ErrorDescriptionFactory.forSpan">
            <api name="JavaHintsSPI"/>
            <summary>Introducing ErrorDescriptionFactory.forSpan.</summary>
            <version major="1" minor="9"/>
            <date day="19" month="12" year="2012"/>
            <author login="jlahoda"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added ErrorDescriptionFactory.forSpan to create the correct
                    Java-enhanced ErrorDescription from a span.
                </p>    
            </description>
            <class package="org.netbeans.spi.java.hints" name="ErrorDescriptionFactory"/>
            <issue number="223723"/>
        </change>
        <change id="TransformationSupport">
            <api name="JavaHintsSPI"/>
            <summary>Added support for using jackpot patterns from other modules (e.g. refactoring).</summary>
            <version major="1" minor="1"/>
            <date day="29" month="3" year="2012"/>
            <author login="jbecicka"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added support for using jackpot patterns from other modules (e.g. refactoring).
                </p>    
            </description>
            <class package="org.netbeans.spi.java.hints.support" name="TransformationSupport"/>
            <issue number="210262"/>
        </change>
    </changes>
    <htmlcontents>
        <head>
            <title>Change History for the Java Hints SPI</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 Java Hints SPI.</p>
            
            <!-- The actual lists of changes, as summaries and details: -->
            <hr/>
            <standard-changelists module-code-name="$codebase"/>
            
            <hr/>
            <p>@FOOTER@</p>
        </body>
    </htmlcontents>
</apichanges>
