AO Lang Changelog

ao-lang-4.4.0

Release Notes

  • New methods WrappedException.wrapChecked(Callable, …) that invoke a callable while wrapping any checked exceptions. This is especially helpful when using methods with checked exceptions within Java 8+ functional/stream contexts.

ao-lang-4.3.1

Release Notes

  • ZipUtils.unzip(…) now throws IOException when unable to create directories.

ao-lang-4.3.0

Release Notes

ao-lang-4.2.0

Release Notes

ao-lang-4.1.0

Release Notes

ao-lang-4.0.0

Release Notes

  • Minimum Java version changed from 1.7 to 1.8.
  • Reduced use of property substitutions in pom.xml. This is to help 3rd-party parsers that fail to perform full Maven-compatible substitutions.
  • New wrappers to avoid closing streams and writers.
  • New appendTo(…) methods on Writable for use with Appendable. Reasonably efficient default interface methods are provided, but implementations may provide more optimal solutions.
  • New class AppendableWriter that adapts Writer to Appendable.
  • Added support for trimming String and CharSequence based on code points, with a value considered whitespace when it is either <= '\u0020' (for compatibility with String.trim()) or Character.isWhitespace(int).
  • Writable now trims based on code points, with a value considered whitespace when it is either <= '\u0020' (for compatibility with String.trim()) or Character.isWhitespace(int).
  • New static constants for various common content-type: ContentType.
  • Deprecated com.aoindustries.time package since now redundant with Java 8.
  • New package com.aoindustries.exceptions.
  • New static SmartComparator.ROOT for comparisons done in Locale.ROOT.
  • Strings now splits based on code points, with a value considered whitespace when it is either <= '\u0020' (for compatibility with String.trim()) or Character.isWhitespace(int).
  • New @FunctionalInterface interface SerializableFunction, that unions Function and Serializable.
  • New class Iterables with a set of various Iterable over common Java types, useful to avoid conflict after type erasure.

    Sometimes different method overloads want to accept different types of Iterable, but they cannot due to conflict after type erasure.

  • Updated dependencies.
  • Moved and renamed classes:
    1. com.aoindustries.util.StringUtilityStrings
  • com.aoindustries.security.NotAuthenticatedException moved here from the old AOCode Public project. Resolves this split-package with AOCode Public.
  • Split collection-related utilities into new AO Collections project.
  • Moved a few general-purpose exceptions to the new com.aoindustries.exception package:
    1. NotImplementedException
    2. WrappedException
    3. WrappedExceptions
  • Renamed Strings.splitString(…) to Strings.split(…).
  • Deprecated SafeMath.multiply(long, long), please use Math.multiplyExact(long, long).

ao-lang-3.3.0

Release Notes

ao-lang-3.2.0

Release Notes

  • Added new variants of StringUtility.indexOf(…) that accept a BitSet of the characters to find.

ao-lang-3.1.0

Release Notes

  • Fixed bug in CalendarUtils.parseDate(…) that failed to set the month before verifying date is valid within the month.
  • Moved the following classes from the old AOCode Public project:
    1. com.aoindustries.util.StringUtility
  • Added missing char to String replacement methods in StringUtility.
  • New methods in XmlUtils for element ID validation and generation.

ao-lang-3.0.0

Release Notes

  • Breaking changes (source-compatible, rebuild required):
    1. CalendarUtils returns GregorianCalendar instead of Calendar where appropriate.
  • New class Monies for processing multiple monetary values in different currencies at once.
  • New class CurrencyUtil for help working with Currency.
  • Changed from Calendar.getInstance() to new GregorianCalendar() to work correctly independent of locale settings.
  • Created TimeZone variants of date/time conversion methods.
  • Deprecated AoCollections.emptyIterator() in favor of Collections.emptyIterator() available since Java 1.7.
  • ErrorPrinter now includes all suppressed exceptions from Throwable.getSuppressed().

ao-lang-2.1.0

Release Notes

  • New method SafeMath.castShort(long) to safely cast from long to short with bounds checks.
  • Using managed dependencies:
    1. This project uses managed dependencies.
    2. This project's managed dependencies may also be imported by other projects.
  • Resolved Javadoc warnings.

ao-lang-2.0.0

Release Notes

ao-lang-1.0.0

Release Notes

  • Pulling small, general-purpose extensions to the standard Java libraries out of AOCode Public into a new AO Lang project.
  • New AoArrays.sortParallelArrays method to sort parallel arrays.
  • ProcessResult improvements:
    1. exec method now allows varargs.
    2. Now uses only one additional thread to read standard error.
    3. Delays the allocation of StringBuilder objects until needed.
    4. Provides an appropriate starting buffer size to the StringBuilder objects.
    5. Reduces the amount of synchronization.
  • BufferManager improvements:
    1. Uses soft references to avoid potential runaway memory leaks.
    2. Provides additional statistics including the number of buffers zero-filled and detected as garbage collected.
    3. Javadoc comment improvements.
  • ApplicationResourcesAccessor improvements:
    1. Added Listener hook for code interested in calls to getMessage.
    2. Used this new hook to decouple AO Lang from AOCode Public.
  • FastObjectOutput improvements:
    1. writeFastUTF compares strings with .equals to find all duplicates.
    2. Removed internal quick-scan arrays. We've learned to not underestimate the performance of HashMap.
    3. Improved Javadocs.
  • FastObjectInput improvements:
    1. Improved Javadocs.
  • Also moving some of the small, general-purpose extensions to the standard Java libraries out of AOServ Client into this new AO Lang project.
  • AoCollections improvements:
    1. New filterByValue methods to get the key set from maps for all entries matching a given value.
    2. unmodifiableCopy* methods allow wider generic bounds for more versatility.
    3. optimalUnmodifiable* methods allow wider generic bounds for more versatility.
    4. unmodifiableIterator method allows wider generic bounds for more versatility.
    5. filter method allows wider generic bounds for more versatility.
    6. filterByValue methods allow wider generic bounds for more versatility.
  • New method XmlUtils.getChildTextContent(Element, String) to get child text content with a one-liner.
  • New method FileUtils.readFileAsString(File, Charset) to provide the character set when reading a file into a string.
  • New localized exception LocalizedIllegalStateException.
  • Updated dependencies.