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. ============================================================================= Commons Lang Package Version 2.5 Release Notes INTRODUCTION: This document contains the release notes for the 2.5 version of Apache Commons Lang. Commons Lang is a set of utility functions and reusable components that should be of use in any Java environment. COMPATIBILITY WITH 2.4 ====================== Lang 2.5 is binary compatible release with Lang 2.4, containing bug fixes and small enhancements. Lang 2.5 requires a minimum of JDK 1.3. IMPROVEMENTS IN 2.5 =================== * [LANG-583] - ArrayUtils - add isNotEmpty() methods * [LANG-534] - ArrayUtils - add nullToEmpty() methods * [LANG-454] - CharRange - provide an iterator that lets you walk the chars in the range * [LANG-514] - CharRange - add more readable static builder methods * [ ] - ClassUtils - new isAssignable() methods with autoboxing * [LANG-535] - ClassUtils - add support to getShortClassName and getPackageName for arrays * [LANG-434] - DateUtils - add ceiling() method * [LANG-486] - DateUtils - add parseDateStrictly() method * [LANG-466] - EqualsBuilder - add reset() method * [LANG-461] - NumberUtils - add toByte() and toShort() methods * [LANG-522] - Mutable numbers - add string constructors * [ ] - MutableBoolean - add toBoolean(), isTrue() and isFalse() methods * [LANG-422] - StrBuilder - add appendSeparator() methods with an alternative default separator if the StrBuilder is currently empty * [LANG-555] - SystemUtils - add IS_OS_WINDOWS_7 constant * [LANG-554] - SystemUtils - add IS_JAVA_1_7 constant for JDK 1.7 * [LANG-405] - StringUtils - add abbreviateMiddle() method * [LANG-569] - StringUtils - add indexOfIgnoreCase() and lastIndexOfIgnoreCase() methods * [LANG-471] - StringUtils - add isAllUpperCase() and isAllLowerCase() methods * [LANG-469] - StringUtils - add lastOrdinalIndexOf() method to complement the existing ordinalIndexOf() method * [LANG-438] - StringUtils - add repeat() method * [LANG-445] - StringUtils - add startsWithAny() method * [LANG-430] - StringUtils - add upperCase(String, Locale) and lowerCase(String, Locale) methods * [LANG-416] - New Reflection package containing ConstructorUtils, FieldUtils, MemberUtils and MethodUtils BUG FIXES IN 2.5 ================ * [LANG-494] - CharSet - Synchronizing the COMMON Map so that getInstance doesn't miss a put from a subclass in another thread * [LANG-500] - ClassUtils - improving performance of getAllInterfaces * [LANG-587] - ClassUtils - toClass() throws NullPointerException on null array element * [LANG-530] - DateUtils - Fix parseDate() cannot parse ISO8601 dates produced by FastDateFormat * [LANG-440] - DateUtils - round() doesn't work correct for Calendar.AM_PM * [LANG-443] - DateUtils - improve tests * [LANG-204] - Entities - multithreaded initialization * [LANG-506] - Entities - missing final modifiers; thread-safety issues * [LANG-76] - EnumUtils - getEnum() doesn't work well in 1.5+ * [LANG-584] - ExceptionUtils - use immutable lock target * [LANG-477] - ExtendedMessageFormat - OutOfMemory with a pattern containing single quotes * [LANG-538] - FastDateFormat - call getTime() on a calendar to ensure timezone is in the right state * [LANG-547] - FastDateFormat - Remove unused field * [LANG-511] - LocaleUtils - initialization of available locales can be deferred * [LANG-457] - NumberUtils - createNumber() throws a StringIndexOutOfBoundsException for "l" * [LANG-521] - NumberUtils - isNumber(String) and createNumber(String) both modified to support '2.' * [LANG-432] - StringUtils - improve handling of case-insensitive Strings * [LANG-552] - StringUtils - replaceEach() no longer NPEs when null appears in the last String[] * [LANG-460] - StringUtils - correct Javadocs for startsWith() and startsWithIgnoreCase() * [LANG-421] - StringEscapeUtils - escapeJava() escapes '/' characters * [LANG-450] - StringEscapeUtils - change escapeJavaStyleString() to throw UnhandledException instead swallowing IOException * [LANG-419] - WordUtils - fix StringIndexOutOfBoundsException when lower is greater than the String length * [LANG-523] - StrBuilder - Performance improvement by doubling the size of the String in ensureCapacity * [LANG-575] - Compare, Equals and HashCode builders - use ArrayUtils to avoid creating a temporary List * [LANG-467] - EqualsBuilder - removing the special handling of BigDecimal (LANG-393) to use compareTo * [LANG-574] - HashCodeBuilder - Performance improvement: check for isArray to short-circuit the 9 instanceof checks * [LANG-520] - HashCodeBuilder - Changing the hashCode() method to return toHashCode() * [LANG-459] - HashCodeBuilder - reflectionHashCode() can generate incorrect hashcodes * [LANG-586] - HashCodeBuilder and ToStringStyle - use of ThreadLocal causes memory leaks in container environments * [LANG-487] - ToStringBuilder - make default style thread-safe * [LANG-472] - RandomUtils - nextLong() always produces even numbers * [LANG-592] - RandomUtils - RandomUtils tests are failing frequently