<?xml version="1.0" encoding="ISO-8859-1"?>

<document>
  <properties>
    <title>Changes</title>
    <author>Lars Kühne</author>
  </properties>
  <body>

    <release version="0.6" date="2005-09-27">
        <action dev="lkuehne" type="add">
            Clirr now provides a SPI to represent the java code structure, the checks
            now work against this SPI. Clirr provides a SPI implementation that works
            on jar files, but other implementations can be used as well. For example,
            an IDE will typically already have an in-memory representation of the Java
            sources, so a Clirr IDE plugin could use that (via an adapter) and would
            not require a full compile before running Clirr.
            The API will most probably be in flux when Clirr adds support for Java 1.5
            features like generics and varargs.
        </action>
        <action dev="lkuehne" type="fix">
            <!-- Bug #1267189-->
            Ant task: Class exclusion via apiclasses subelement was broken on Windows.
        </action>
        <action dev="lkuehne" type="fix">
            CLI: Handling of multi-jar libraries in parameters -o and -n was broken on Windows.
        </action>
        <action dev="lkuehne" type="fix">
            <!-- Bug #1284303-->
            CLI: Allow specification of 3rd party jars via new options -ocp and -ncp.
        </action>
        <action dev="lkuehne" type="update">
            Improved test coverage.
        </action>
        <action dev="lkuehne" type="update">
            <!-- rfe #1283314, now using javaapp plugin instead of uberjar plugin -->
            Improved startup time of commandline uberjar.
        </action>
        <action dev="lkuehne" type="fix">
            <!-- rfe #1022920, now using javaapp plugin instead of uberjar plugin -->
            Ant task now works with uberjar.
        </action>
    </release>

    <release version="0.5" date="2005-08-07">
        <action dev="lkuehne" type="fix">
            Avoid false alarms when package visible classes are removed.
        </action>
        <action dev="lkuehne" type="add">
            Removed the ant.jar from the uberjar file, resulting in
            a much smaller distribution size.
        </action>
        <action dev="lkuehne" type="add">
            The Ant task now allows to exclude classes from compatibility checks
            via the 'apiclasses' subelement.
        </action>
        <action dev="lkuehne" type="add">
            <!-- RFE #1241245-->
            Detect change of method final modifier.
        </action>
    </release>

    <release version="0.4" date="2004-09-05">
        <action dev="lkuehne" type="add" due-to="skitching">
            Improved change messages if field accessibility is weakened/strengthened.
        </action>
        <action dev="lkuehne" type="add">
            <!-- RFE #961227-->
            Detect 'pull up in class hierarchy' refactoring for methods.
        </action>
        <action dev="lkuehne" type="fix">
            XML formatter did not write method and field attributes
            correctly.
        </action>
        <action dev="s_kitching" type="add">
            Report on methods being deprecated or undeprecated.
        </action>
        <action dev="s_kitching" type="add">
            Added a command-line interface, net.sf.clirr.cli.Clirr,
            for running checks and generating reports from the
            command-line.
        </action>
        <action dev="lkuehne" type="fix">
            <!-- RFE #961229-->
            Removed abstract methods that are specified by an implemented interface
            are no longer reported as a compatibility problem.
        </action>
        <action dev="s_kitching" type="add">
            Report on classes changing accessibility (top-level classes changing
            between public and package, or nested classes changing between any
            of public/protected/package/private).
        </action>
        <action dev="s_kitching" type="add">
            It is no longer an error to add a "final" attribute to a class
            which has no public or protected constructors, as it was always
            impossible to derive subclasses from it anyway.
        </action>
        <action dev="lkuehne" type="add">
            Clirr now analyses code changes for source code compatibility problems as well.
            Note: Ant task attribute names and the output format of the XML formatter
            have changed to support this feature.
        </action>
        <action dev="lkuehne" type="add">
            Error messages are now localized. Initial supported languages are english and german.
        </action>
        <action dev="s_kitching" type="fix">
            Treat all changes in package and private items as being of INFO level
            severity only, ie changes which would result in an ERROR being
            reported if they were public or protected are reported with a severity
            of INFO if they are package or private.
        </action>
    </release>

    <release version="0.3" date="2004-05-23">
        <action dev="lkuehne" due-to="Stephen Colebourne" type="fix">
            Fixed a copy + paste error in field modifier comparison logic
            that would lead to false alarms and undetected compatibility
            problems.
        </action>
        <action dev="lkuehne" type="add">
            <!-- RFE #958810 -->
            Detect changes of field types.
        </action>
        <action dev="lkuehne" type="add">
            <!-- RFE #958808 -->
            Ant Task fails when filesets origFiles or newFiles are empty.
            Empty file sets are usually a setup problem - they should not
            create the impression that there are no compatibility problems,
            just because Clirr didn't report anything.
        </action>
        <action dev="lkuehne" type="fix">
            <!-- RFE #958807 -->
            Documented formatter subelements in Ant task.
        </action>
        <action dev="lkuehne" type="add">
            <!-- RFE #958808 -->
            Warn about compile time constant value changes. Changing the value
            of a constant is not binary incompatible (you won't get any Exception),
            but client code compiled against the old version of the library will
            have the old value inlined and continue to use that old value.
            See the Java Language Spec, Chapter 13.4.8, for details.
        </action>
        <action dev="lkuehne" type="add">
            <!-- RFE #958809 -->
            Warn about adding new superclasses to a class derived from java.lang.Throwable.
            Such changes are not binary incompatible (you won't get any Exception),
            but a different catch clause might get selected in client code.
        </action>
    </release>

    <release version="0.2" date="2004-05-22">
      <action dev="lkuehne" type="add">
        Initial public release.
      </action>
    </release>
  </body>
</document>
