| <?xml version="1.0" encoding="ISO-8859-1"?> |
| <!-- |
| 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. |
| --> |
| <document> |
| |
| <properties> |
| <title>Compatibility</title> |
| <author email="dev@commons.apache.org">Commons Documentation Team</author> |
| </properties> |
| |
| <body> |
| |
| <section name="Version compatibility of Commons Collections"> |
| |
| <p> |
| This page details the compatibility of different collections releases. |
| </p> |
| |
| <p> |
| There are two types of compatibility discussed here, source and binary. |
| </p> |
| <ul> |
| <li> |
| Two versions are source compatible when application code can be compiled |
| against either version successfully. The compilation may result in deprecation warnings |
| but that is perfectly acceptable. |
| When code is source incompatible, it fails to compile, thus this type of incompatibility is easy to find. |
| </li> |
| <li> |
| Two versions are binary compatible when application code compiled against |
| one version will run using the other version without recompilation. |
| This is much more difficult to test for, and follows quite complicated rules from the |
| <a href="http://java.sun.com/docs/books/jls/second_edition/html/binaryComp.doc.html">Java language</a>. |
| </li> |
| </ul> |
| <p> |
| Releases of commons collections aim to be source and binary compatible within minor versions, |
| and to avoid breakages as much as possible between major versions. |
| </p> |
| |
| <p> |
| Commons collections 3.0 is source compatible with version 2.1 and 2.0 with the exception |
| of classes previously deprecated in 2.0/2.1 (which were removed in 3.0). |
| </p> |
| |
| <p> |
| Commons collections 3.0 is binary compatible with version 2.1 and 2.0 |
| <b>except for certain methods on one class</b>. |
| As the release was a major version, this is permitted, however it was unintentional and an error. |
| The problem is in the <b><code>IteratorUtils</code></b> class (see methods below). |
| (Strictly speaking, there are some minor incompatibilities on other classes, but these |
| changes were deliberate and have not caused any known issues.) |
| </p> |
| |
| <p> |
| It is not possible to make v2.1 and v3.0 compatible without further binary incompatibility. |
| The chosen solution is to provide a work around by releasing v2.1.1 and v3.1. |
| The following deprecations must be resolved in v2.1.1 to allow compatibility with v3.1. |
| </p> |
| <ul> |
| <li>Deprecated <code>IteratorUtils.arrayIterator(...)</code> - |
| use <code>new ArrayIterator(...)</code> instead</li> |
| <li>Deprecated <code>IteratorUtils.singletonIterator(...)</code> - |
| use <code>new SingletonIterator(...)</code> instead</li> |
| <li>Deprecated <code>IteratorUtils.emptyIterator()</code> - |
| use <code>EmptyIterator.INSTANCE</code> instead</li> |
| <li>Deprecated <code>IteratorUtils.emptyListIterator()</code> - |
| use <code>EmptyListIterator.INSTANCE</code> instead</li> |
| <li>Deprecated <code>IteratorUtils.EMPTY_ITERATOR</code> - |
| use <code>EmptyIterator.INSTANCE</code> instead</li> |
| <li>Deprecated <code>IteratorUtils.EMPTY_LIST_ITERATOR</code> - |
| use <code>EmptyIterator.INSTANCE</code> instead</li> |
| </ul> |
| |
| <p> |
| For the future, a new tool <a href="http://clirr.sourceforge.net">clirr</a> is being developed |
| to help spot binary incompatibility before release. |
| </p> |
| |
| </section> |
| |
| </body> |
| </document> |