<?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="../../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="java_project">Java Project API</apidef>
        <apidef name="classpath">Classpath Support SPI</apidef>
        <apidef name="java_project_ui_old">UI Support SPI (obsoleted)</apidef>
        <!-- etc. -->
    </apidefs>

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

    <changes>
        <change id="ProjectModulesModifier">
            <api name="java_project"/>
            <summary>Added a SPI to manipulate with project's <code>module-info.java</code> declarations</summary>
            <version major="1" minor="71"/>
            <date day="16" month="3" year="2017"/>
            <author login="sdedic"/>
            <compatibility addition="yes"/>
            <description>
                Added a SPI interface, which should be implemented on project to provide backwards compatibility for
                <code>ProjectClassPathModifier</code> for modular projects. 
            </description>
            <class package="org.netbeans.spi.java.project.classpath" name="ProjectModulesModifier"/>
        </change>
        <change id="CompilerOptionsQueryMerger">
            <api name="java_project"/>
            <summary>Added a <code>LookupMerger</code> for <code>CompilerOptionsQueryImplementation</code>s</summary>
            <version major="1" minor="68"/>
            <date day="4" month="10" year="2016"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                Added a factory method <code>LookupMergerSupport.createCompilerOptionsQueryMerger</code>
                to create a <code>LookupMerger</code> for <code>CompilerOptionsQueryImplementation</code>s
                instances.
            </description>
            <class package="org.netbeans.spi.java.project.support" name="LookupMergerSupport"/>
        </change>
        <change id="ProjectPlatform">
            <api name="java_project"/>
            <summary>Added a support for per project JavaPlatform</summary>
            <version major="1" minor="66"/>
            <date day="17" month="8" year="2016"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added a support for per project <code>JavaPlatform</code>.
                    The usecase for the per project JavaPlatform is a generated
                    project. The project generator puts platform path into
                    the project properties and the generated projects have correct
                    JavaPlatform. There is no need to resolve broken JavaPlatform
                    when the projects are opened.
                </p>
                <p>
                    To use the per project <code>JavaPlatform</code> set the
                    <code>platform.active</code> property to the platform name and
                    add the <code>platforms.&lt;platform_name&gt;.home</code> property
                    pointing to the path to the JDK home.
                </p>
                <p>
                    Example:<br/>
                    <code>platforms.MyJDK.home=/Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home</code><br/>
                    <code>platform.active=MyJDK</code><br/>
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support" name="ProjectPlatform"/>
        </change>
        <change id="server.is.free">
            <api name="java_project"/>
            <summary>Desktop dependent Java Project Support UI extracted</summary>
            <version major="1" minor="62"/>
            <date day="2" month="6" year="2014"/>
            <author login="tstupka"/>
            <compatibility modification="yes" addition="yes">
                <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>
            </compatibility>
            <description>
                <p>
                    The following packages were moved from 
                    <a href="@org-netbeans-modules-java-project@/overview-summary.html">org.netbeans.modules.java.project</a> 
                    into the
                    <a href="@org-netbeans-modules-java-project-ui@/overview-summary.html">org.netbeans.modules.java.project.ui</a> module:
                </p>
                <ul>
                    <li><a href="@org-netbeans-modules-java-project-ui@/org/netbeans/api/java/project/runner/package-summary.html">o.n.api.java.project.runner</a></li>
                    <li><a href="@org-netbeans-modules-java-project-ui@/org/netbeans/spi/java/project/runner/package-summary.html">o.n.spi.java.project.runner</a></li>
                    <li><a href="@org-netbeans-modules-java-project-ui@/org/netbeans/spi/java/project/support/ui/package-summary.html">o.n.spi.java.project.support.ui</a></li>
                    <li><a href="@org-netbeans-modules-java-project-ui@/org/netbeans/spi/java/project/support/ui/templates/package-summary.html">o.n.spi.java.project.support.ui.templates</a></li>
                </ul>
            </description>
        </change>  
        <change id="JavaTemplates-icons">
            <api name="java_project"/>
            <summary>Added more specific icons into <code>JavaTemplates</code></summary>
            <version major="1" minor="60"/>
            <date day="30" month="7" year="2013"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added more specific icons into <code>JavaTemplates</code>
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support.ui.templates" name="JavaTemplates" link="no"/>
        </change>
        <change id="JavadocAndSourceRootDetection-findJavadocRoots">
            <api name="java_project"/>
            <summary>Added <code>JavadocAndSourceRootDetection.findJavadocRoots</code> method to find out all javadoc roots under given folder</summary>
            <version major="1" minor="56"/>
            <date day="4" month="7" year="2013"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added <code>JavadocAndSourceRootDetection.findJavadocRoots</code> method to find out all javadoc roots under given folder.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support" name="JavadocAndSourceRootDetection"/>
            <issue number="232084"/>
        </change>
        <change id="ProjectModificationActions">
            <api name="java_project"/>
            <summary>Added <code>ProjectProblemsProvider</code> to resolve JDK 8 Profile problems</summary>
            <version major="1" minor="53"/>
            <date day="12" month="4" year="2013"/>
            <author login="mkozeny"/>
            <compatibility addition="yes" deprecation="yes"/>
            <description>
                <p>
                    In method <code>getActions</code> added package actions from <code>Projects/package/Actions</code>.
                </p>
            </description>
            <!--<class package="org.netbeans.spi.java.project.support.ui" name="PackageViewChildren" link="no"/>-->
            <issue number="200833"/>
        </change>
        <change id="BrokenReferencesSupport-Profiles">
            <api name="java_project"/>
            <summary>Added <code>ProjectProblemsProvider</code> to resolve JDK 8 Profile problems</summary>
            <version major="1" minor="53"/>
            <date day="28" month="3" year="2013"/>
            <author login="tzezula"/>
            <compatibility addition="yes" deprecation="yes"/>
            <description>
                <p>
                    Added a factory method <code>createProfileProblemProvider</code> into <code>BrokenReferencesSupport</code>
                    creating a <code>ProjectProblemsProvider</code> resolving dependencies on libraries with higher or invalid profile.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support.ui" name="BrokenReferencesSupport" link="no"/>
            <issue number="227831"/>
        </change>
        <change id="ProjectProblems">
            <api name="java_project"/>
            <summary>Changed <code>BrokenReferencesSupport</code> to delegate to <code>ProjectProblems</code></summary>
            <version major="1" minor="46"/>
            <date day="24" month="7" year="2012"/>
            <author login="tzezula"/>
            <compatibility addition="yes" deprecation="yes"/>
            <description>
                <p>
                    Added <code>PreferredProjectPlatform</code> to provide a
                    <code>JavaPlatform</code> which should be used for a new project.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support.ui" name="BrokenReferencesSupport" link="no"/>
            <issue number="215628"/>
        </change>
        <change id="PreferredProjectPlatform">
            <api name="java_project"/>
            <summary>Added <code>PreferredProjectPlatform</code></summary>
            <version major="1" minor="46"/>
            <date day="20" month="5" year="2012"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added <code>PreferredProjectPlatform</code> to provide a 
                    <code>JavaPlatform</code> which should be used for a new project.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support" name="PreferredProjectPlatform"/>
            <issue number="208528"/>
        </change>
        <change id="ProfilerActions">
            <api name="java_project"/>
            <summary>Added 
                <code>JavaRunner.QUICK_PROFILE</code>, 
                <code>JavaRunner.QUICK_TEST_PROFILE</code> and
                <code>JavaRunner.QUICK_PROFILE_APPLET</code> constants
            </summary>
            <version major="1" minor="44"/>
            <date day="27" month="3" year="2011"/>
            <author login="yardus"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Integrating profiler into the generic project infrastructure.
                </p>
            </description>
            <class package="org.netbeans.api.java.project.runner" name="JavaRunner" link="no"/>
            <issue number="203519"/>
        </change>
        <change id="ProjectClassPathModifier.extenderForModifier">
            <api name="classpath"/>
            <summary>Added <code>ProjectClassPathModifier.extenderForModifier</code></summary>
            <version major="1" minor="41"/>
            <date day="22" month="8" year="2011"/>
            <author login="jglick"/>
            <compatibility addition="yes">
                <p>
                    Any modules still implementing <code>ProjectClassPathExtender</code> should cease to do so.
                </p>
            </compatibility>
            <description>
                <p>
                    Added a bridge from an old SPI to the newer, preferred SPI.
                    Also added <code>LookupMergerSupport.createClassPathModifierMerger</code>.
                </p>
            </description>
            <class package="org.netbeans.api.java.project.classpath" name="ProjectClassPathModifier"/>
            <class package="org.netbeans.spi.java.project.support" name="LookupMergerSupport"/>
            <issue number="196455"/>
        </change>
        <change id="JAVA_ICON">
            <api name="java_project"/>
            <summary>Added <code>JavaTemplates.JAVA_ICON</code></summary>
            <version major="1" minor="40"/>
            <date day="25" month="7" year="2011"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added a constant for a Java template icon.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support.ui.templates" name="JavaTemplates" link="no"/>
            <issue number="200175"/>
        </change>
        <change id="BrokenReferencesSupport-showAlert">
            <api name="java_project"/>
            <summary>Added <code>showAlert</code> method into the<code>BrokenReferencesSupport</code></summary>
            <version major="1" minor="37"/>
            <date day="7" month="3" year="2011"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added showAlert method having project context allowing the broken references alert to do
                    the broken references resolution.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support.ui" name="BrokenReferencesSupport" link="no"/>
            <issue number="195249"/>
        </change>
        <change id="LibraryDefiner">
            <api name="java_project"/>
            <summary>Added <code>LibraryDefiner</code></summary>
            <version major="1" minor="35"/>
            <date day="2" month="2" year="2011"/>
            <author login="jglick"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added a new SPI to permit alternate ways of resolving missing library references.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support.ui" name="BrokenReferencesSupport" link="no"/>
            <issue number="194744"/>
        </change>
        <change id="JavadocAndSourceRootDetection.findSourceRoots">
            <api name="java_project"/>
            <summary>Added JavadocAndSourceRootDetection.findSourceRoots method to find all source roots under the given folder</summary>
            <version major="1" minor="31"/>
            <date day="15" month="1" year="2010"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added JavadocAndSourceRootDetection.findSourceRoots to find all source roots under the given folder.
                    This method is used by the import source roots in the new project wizards.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support" name="JavadocAndSourceRootDetection"/>
            <issue number="179427"/>
        </change>
        <change id="JavaRunner-runtime-encoding">
            <api name="java_project"/>
            <summary>Added JavaRunner.PROP_RUNTIME_ENCODING property for COS Runner</summary>
            <version major="1" minor="28"/>
            <date day="19" month="10" year="2009"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added <code>JavaRunner.PROP_RUNTIME_ENCODING</code> property to allow project types
                    to pass the runtime encoding to jvm.
                </p>
            </description>
            <class package="org.netbeans.api.java.project.runner" name="JavaRunner" link="no"/>
            <issue number="173406"/>
        </change>

        <change id="source-group-modifier-constants">
            <api name="java_project"/>
            <summary>Constants for SourceGroupModifier</summary>
            <version major="1" minor="25"/>
            <date day="18" month="2" year="2009"/>
            <author login="mkleint"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Added a few constants to <code>JavaProjectConstants</code> for use by <code>SourceGroupModifier</code> with relation
                    to java projects.
                </p>
            </description>
            <class package="org.netbeans.api.java.project" name="JavaProjectConstants"/>
            <issue number="102711"/>
        </change>

        <change id="CPModifier-addProject">
            <api name="java_project"/>
            <summary>Addition of ProjectClassPathModifier.addProject() method</summary>
            <version major="1" minor="24"/>
            <date day="11" month="2" year="2008"/>
            <author login="mkleint"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code>ProjectClassPathModifier.addProject(Project[], FileObject, String)</code> is a partial replacement for
                    <code>ProjectClassPathModifier.addAntArtifact()</code> that is capable of working with non-ant based project types as well.
                    It's not guaranteed that the source and target project will connect in cases when each is of different class of project. Eg.
                    Ant-based vs Maven project types. A way to check is to attempt to retrieve AntArtifact from the source and target projects..
                </p>
            </description>
            <class package="org.netbeans.api.java.project.classpath" name="ProjectClassPathModifier"/>
            <class package="org.netbeans.spi.java.project.classpath" name="ProjectClassPathModifierImplementation"/>
            <issue number="157985"/>
        </change>

        
        <change id="javadoc-root-and-source-root-detection">
            <api name="java_project"/>
            <summary>Detection of Javadoc root and source root</summary>
            <version major="1" minor="20"/>
            <date day="22" month="7" year="2008"/>
            <author login="dkonecny"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Class <code>JavadocAndSourceRootDetection</code> added with couple of
                    helper methods to detect Javadoc and/or sources root.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support" name="JavadocAndSourceRootDetection"/>
            <issue number="124779"/>
        </change>

        <change id="JavaRunner">
            <api name="java_project"/>
            <summary>Added JavaRunner</summary>
            <version major="1" minor="22"/>
            <date day="29" month="9" year="2008"/>
            <author login="jlahoda"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    Classes <code>JavaRunner</code> and <code>JavaRunnerImplementation</code> added.
                </p>
            </description>
            <class package="org.netbeans.api.java.project.runner" name="JavaRunner" link="no"/>
            <class package="org.netbeans.spi.java.project.runner" name="JavaRunnerImplementation" link="no"/>
            <issue number="138504"/>
        </change>
        
        <change id="LookupMerger">
            <api name="classpath"/>
            <summary>Create LookupMerger implementation for ClassPathProvider</summary>
            <version major="1" minor="18"/>
            <date day="19" month="5" year="2008"/>
            <author login="mkleint"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                    <code>LookupMergerSupport.createClassPathProviderMerger(ClassPathProvider)</code>
                    can be used to allow composing the project's classpath from multiple sources (modules).
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support" name="LookupMergerSupport"/>
            <issue number="134341"/>
        </change>
        
        <change id="use-uri-for-relative-paths">
            <api name="java_project"/>
            <summary>Support for adding/removing relative classpath entries</summary>
            <version major="1" minor="16"/>
            <date day="27" month="3" year="2008"/>
            <author login="dkonecny"/>
            <compatibility addition="yes"/>
            <description>
                <p>Allow to add/remove relative classpath entries.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.classpath" name="ProjectClassPathModifierImplementation"/>
            <class package="org.netbeans.api.java.project.classpath" name="ProjectClassPathModifier"/>
            <issue number="129628"/>
        </change>        
        <change id="ant-project-libraries">
            <api name="java_project"/>
            <summary>Support for project-specific libraries</summary>
            <version major="1" minor="15"/>
            <date day="7" month="2" year="2008"/>
            <author login="mkleint"/>
            <compatibility addition="yes"/>
            <description>
                <p> A new utility class for helping project types create UI for
                sharable Libraries.
                </p>
                <p> An additional protected method for use in <code>ProjectClassPathModifierImplementation</code> subclasses named
                <code>performSharabilityHeuristics(URL,AntProjectHelper)</code> that takes classpath roots and tries to find the best way to reference that jar/folder.
                </p>
                
            </description>
            <class package="org.netbeans.spi.java.project.support.ui" name="SharableLibrariesUtils" link="no"/>
            <class package="org.netbeans.spi.java.project.classpath" name="ProjectClassPathModifierImplementation"/>
            <issue number="44035"/>
        </change>        
    <change id="AttachJavadocSourceToJar">
        <api name="java_project_ui_old"/>
        <summary>Added support classes for attaching javadoc/source to jar-based classpath items</summary>
        <version major="1" minor="14"/>
        <date day="21" month="1" year="2008"/>
        <author login="mkleint"/>
        <compatibility addition="yes"/>
        <description>
            3 new utility classes to allow attaching javadoc/source to existing jar dependencies of an Ant-based project.
            These classes are for use by project type owners. Specifically
            <ul>
                <li><code>ExtraSourceJavadocSupport.createExtraSourceQueryImplementation()</code> and 
                <code>ExtraSourceJavadocSupport.createExtraJavadocQueryImplementation()</code> 
                create instances to be added to project's Lookup.</li>
                <li><code>LookupMergerSupport.createSFBLookupMerger()</code> and <code>LookupMergerSupport.createJFBLookupMerger()</code>
                provide simple implementations of lookup mergers for respective query implementations. 
                A typical project implementation will put the lookup merger and the Extra*Support's instance in the project's lookup.</li>
                <li><code>EditJarSupport.showEditDialog()</code> is a facotry method for creating editing UI. To be added to Project's properties dialog
                preferably the "Libraries" panel. Client code (project type owner) is assumed to write down the ant properties
               source.reference.__name__ and javadoc.reference.__name__ in the same manner as file.reference.__name__ is persisted.</li>
            </ul>
        </description>
        <class package="org.netbeans.spi.java.project.support" name="ExtraSourceJavadocSupport"/>
        <class package="org.netbeans.spi.java.project.support" name="LookupMergerSupport"/>
        <class package="org.netbeans.spi.java.project.support.ui" name="EditJarSupport" link="no"/>
        <issue number="70497"/>
    </change>
        
    <change id="IncludeExcludeVisualizer">
        <api name="java_project_ui_old"/>
        <summary>Added <code>IncludeExcludeVisualizer</code> support class</summary>
        <version major="1" minor="12"/>
        <date day="1" month="3" year="2007"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            A new utility class which is handy for previewing include and exclude patterns (Ant syntax)
            for source groups, for example in project customizer dialogs.
        </description>
        <class package="org.netbeans.spi.java.project.support.ui" name="IncludeExcludeVisualizer" link="no"/>
        <issue number="49026"/>
    </change>
    <change id="JavaProjectConstants.SOURCES_TYPE_RESOURCES">
        <api name="java_project"/>
        <summary>Add SourceGroup type for resources that are separate from sources</summary>
        <version major="1" minor="11"/>
        <date day="30" month="1" year="2007"/>
        <author login="mkleint"/>
        <compatibility addition="yes"/>
        <description>
            Add a new Sourcegroup type for resources, if these are not put together with Java sources. (For example
            Maven based projects put resource files like images, or properties files in different source structures)
            Useful for creating new resource files in a project from a 3rd party module.
        </description>
        <class package="org.netbeans.api.java.project" name="JavaProjectConstants"/>
        <issue number="89204"/>
    </change>
    <change id="ProjectClassPathModifier">
        <api name="classpath"/>
        <summary>New ProjectClassPathModifier API/SPI for modification of project's classpath</summary>
        <version major="1" minor="10"/>
        <date day="15" month="5" year="2006"/>
        <author login="tzezula"/>
        <compatibility addition="yes"/>
        <description>
        The new SPI interface ProjectClassPathModifierImplementation was created to allow extension modules to
        add or remove classpath elements (archive files, folders, libraries, subprojects) from the
        project's classpath. The ProjectClassPathModifierImplementation is provided by the project types in the
        project's Lookup. The API client uses the static methods of ProjectClassPathModifier which delegate to
        the SPI.
        </description>
        <class package="org.netbeans.api.java.project.classpath" name="ProjectClassPathModifier"/>
        <class package="org.netbeans.spi.java.project.classpath" name="ProjectClassPathModifierImplementation"/>
         <issue number="74356"/>
         <issue number="75469"/>
         <issue number="60852"/>
         <issue number="73197"/>
         <issue number="73198"/>
    </change>
                                                                                                                                
    <change id="BrokenReferencesModel.updateReference">
        <api name="java_project"/>
        <summary>Semantic changes in the BrokenReferencesModel.updateReference behavior</summary>
        <version major="1" minor="6"/>
        <date day="28" month="8" year="2005"/>
        <author login="tzezula"/>
        <compatibility modification="yes" semantic="incompatible"/>
        <description>
                The BrokenReferencesModel was changed to support better sharability of
                projects. The BrokenReferencesModel always stores the resolved broken reference
                into the private properties as absolute files and does not affect the project properties.
        </description>
        <issue number="63401"/>
    </change>
    <change id="JavaProjectConstants">
            <api name="java_project"/>
            <summary>Added artifact type representing folder</summary>
            <version major="1" minor="4"/>
            <date day="20" month="4" year="2005"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                The freeform project may have as its output a folder rather than a jar archive.
                The JavaProjectConstants was extended by the ARTIFACT_TYPE_FOLDER constant to represent such an output.
                </p>
            </description>
            <class package="org.netbeans.api.java.project" name="JavaProjectConstants"/>
            <issue number="57733"/>
        </change>
        <change id="JavaTemplates.factory.package-required">
            <api name="java_project_ui_old"/>
            <summary>Added a new factory method for creating the name/package chooser wizard panel into the templates SPI.</summary>
            <version major="1" minor="3"/>
            <date day="21" month="3" year="2005"/>
            <author login="pjiricka"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                A new factory method for creating the name and package chooser panel in the Java file wizard.
                This method is similar to the methods that already exist in this class; it has an extra boolean 
                parameter that allows to specify whether the entered package name is required to be valid (non-empty).
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support.ui.templates" name="JavaTemplates" link="no"/>
            <issue number="56730"/>
        </change>
        <change id="PackageView.listView">
            <api name="java_project_ui_old"/>
            <summary>Display of packages in a list added</summary>
            <version major="1" minor="3"/>
            <date day="10" month="1" year="2005"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                New methods supporting creation of package lists were added to <code>PackageView</code>.
                <code>createListView(SourceGroup)</code> creates a <code>ComboBoxModel</code> containing the
                packages from a given source group. <code>listRenderer()</code> returns a <code>ListCellRenderer</code>
                rendering the packages.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.support.ui" name="PackageView" link="no"/>
            <issue number="48618"/>
        </change>
         <change id="ProjectClassPathSupport.createPropertyBasedClassPathImplemenentation">
            <api name="classpath"/>
            <summary>Added helper method for creating <code>ClassPathImplementation</code> based on an Ant property</summary>
            <version major="1" minor="3"/>
            <date day="6" month="1" year="2005"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                Added new helper class <code>ProjectClassPathSupport</code>
                with a factory method <code>createPropertyBasedClassPathImplementation(...)</code>.
                This method creates a live classpath based on the list of Ant properties holding the path. The classpath
                implementation listens on changes of properties, updates state and fires events to clients.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.classpath.support" name="ProjectClassPathSupport"/>
            <issue number="42309"/>
        </change>    
        <change id="ProjectClassPathExtender">
            <api name="classpath"/>
            <summary><code>ProjectClassPathExtender</code> made public</summary>
            <version major="1" minor="3"/>
            <date day="5" month="1" year="2005"/>
            <author login="tzezula"/>
            <compatibility addition="yes"/>
            <description>
                <p>
                <code>ProjectClassPathExtender</code> was a private contract between <code>j2seproject</code> and <code>form</code>
                which allowed the form editor to extend the compilation classpath of a project by a new classpath
                element (archive file, folder, dependent project, or library).
                This interface was moved into a public SPI package
                to remove the need to have an implementation dependency of <code>form</code> and <code>j2seproject</code> on <code>java/project</code>.
                </p>
            </description>
            <class package="org.netbeans.spi.java.project.classpath" name="ProjectClassPathExtender"/>
            <issue number="52998"/>
        </change>
        <change id="rel-vers-1">
            <api name="java_project"/>
            <summary>Switched to major release version 1</summary>
            <version major="1" minor="3"/>
            <date day="22" month="12" year="2004"/>
            <author login="jglick"/>
            <compatibility>
                <p>
                    Clients should begin requesting the new version to avoid a warning at startup.
                </p>
            </compatibility>
            <description>
                <p>
                    To indicate that this is now considered a stable API, the major release version was
                    incremented to 1 from 0.
                </p>
            </description>
            <issue number="51468"/>
        </change>
        
    <change>
        <api name="java_project_ui_old"/>
        <summary>Introduction of a new interface PackageRenameHandler which allows plugging into <code>PackageViewChildren.PackageNode.setName()</code></summary>
        <version major="1" minor="5"/>
        <date day="11" month="5" year="2005"/>
        <author login="jbecicka"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
        Refactoring needs to handle rename of Package Nodes. It is allowed through PackageRenameHandler.
        Any client can put it's PackageRenameHandler into Lookup (only one instance is allowed). 
        Implementation of packageNode.setName() will use this instance to handle rename request.
        </description>
        <class package="org.netbeans.spi.java.project.support.ui" name="PackageRenameHandler" link="no"/>
        <issue number="53295"/>
    </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 java/project/apichanges.xml

-->
    <head>
      <title>Change History for the Java Project 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 <a href="@TOP@">Java Project API</a>.</p>

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

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

    </body>
  </htmlcontents>

</apichanges>
