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


<apichanges>
    <apidefs>
        <apidef name="scripting_api">Scripting API</apidef>
        <apidef name="scripting_spi">Scripting SPI</apidef>
    </apidefs>

  <changes>
      <change id="builder">
          <api name="scripting_api"/>
          <summary>
              Scripting is now a builder!
          </summary>
          <version major="1" minor="2"/>
          <date day="1" month="6" year="2019"/>
          <author login="jtulach"/>
          <compatibility binary="compatible" source="compatible" addition="yes"/>
          <description>
              Use
              <a href="@TOP@/org/netbeans/api/scripting/Scripting.html">Scripting.newBuilder().build()</a>
              to obtain enhanced and secured version of 
              <a href="@JDK@@JDKMODULE_JAVA_SCRIPTING@/javax/script/ScriptEngineManager.html">ScriptEngineManager</a>.
          </description>
          <class package="org.netbeans.api.scripting" name="Scripting"/>
          <class package="org.netbeans.spi.scripting" name="EngineProvider"/>
      </change>
      <change id="initial.version">
          <api name="scripting_api"/>
          <summary>
              Initial version of Scripting API
          </summary>
          <version major="1" minor="0"/>
          <date day="1" month="2" year="2019"/>
          <author login="jtulach"/>
          <compatibility binary="compatible" source="compatible" addition="yes"/>
          <description>
              Use
              <a href="@TOP@/org/netbeans/api/scripting/Scripting.html">Scripting.createManager()</a>
              to obtain enhanced version of
              <a href="@JDK@@JDKMODULE_JAVA_SCRIPTING@/javax/script/ScriptEngineManager.html">ScriptEngineManager</a>
              that can work well with <a href="https://graalvm.org">GraalVM</a>
              languages registered via
              <a href="@TOP@/org/netbeans/spi/scripting/EngineProvider.html">EngineProvider</a>
          </description>
          <class package="org.netbeans.api.scripting" name="Scripting"/>
          <class package="org.netbeans.spi.scripting" name="EngineProvider"/>
      </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 Progress API</title>
    </head>
    <body>

<p class="overviewlink"><a href="overview-summary.html">Overview</a></p>

<h1>Introduction</h1>

<p>This document lists changes made to the Progress API/SPI.</p>

<!-- The actual lists of changes, as summaries and details: -->

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

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

    </body>
  </htmlcontents>

</apichanges>
