Skip to content

Releases: cinchapi/accent4j

Version 1.16.2

23 Feb 01:38

Choose a tag to compare

  • Fixed issue with premature publishing to maven central

Version 1.16.1

23 Feb 01:21

Choose a tag to compare

  • Fixed a bug in ByteBuffers#getByteArray that returned incorrect data for sliced ByteBuffer instances. The fast path incorrectly ignored the buffer's arrayOffset, causing it to return the parent buffer's full backing array instead of just the slice's content.
  • Fixed RuntimeDynamics#newAnonymousObject to work on Java 9+ where sun.misc.Unsafe#defineClass was removed. The method now detects the running JVM version and uses MethodHandles.Lookup#defineClass (via reflection) on Java 9+, while preserving the original sun.misc.Unsafe path for Java 8 compatibility.
  • Added Application#javaVersion utility method that returns the major version of the currently running JVM (e.g., 8, 11, 17, 21), correctly handling both the old-style (1.8) and new-style (11) version formats.

Version 1.16.0

18 Dec 23:32

Choose a tag to compare

  • Added comprehensive interface reflection utilities to the Reflection class for working with Java interfaces and default methods:
    • getImplementedInterfaces() - Returns interfaces directly implemented by a class, including interfaces extended by those directly implemented interfaces
    • getAllImplementedInterfaces() - Returns all interfaces from the entire class hierarchy, including interfaces from superclasses
    • getAllDefaultInterfaceMethods() - Returns all default interface methods available to a class from its implemented interfaces
    • getAllNonOverriddenDefaultInterfaceMethods() - Returns default interface methods that have not been overridden by the class or its hierarchy
    • invokeDefaultInterfaceMethod() - Invokes a default interface method on a target object using MethodHandles for proper access
    • Each method has both Class<?> and Object parameter variants for convenience
    • These utilities are particularly useful for reflection-based frameworks that need to understand interface inheritance and default method availability
  • Breaking Change: JoinableExecutorService has been refactored from a concrete class to an interface. This change requires using one of the static factory methods to create instances instead of using constructors directly. The refactoring provides better abstraction and allows for different implementation strategies.
  • Added JoinableDirectExecutorService implementation that executes tasks synchronously in the calling thread, enabling the same code constructs and execution paths when async behavior is not preferred or when configuration requires synchronous execution
  • Fixed Application.classpath() to work on Java 9+ where the system class loader is no longer a URLClassLoader

Version 1.15.0

13 Apr 13:19

Choose a tag to compare

  • Added a fluent builder API for Benchmark that provides a more intuitive way to configure and run benchmarks. The builder supports specifying time units, performing warmup runs, and executing benchmarks asynchronously to ensure fair comparisons between multiple benchmarks by eliminating the impact of JVM warmup and optimization order.

Version 1.14.0

22 Feb 13:57

Choose a tag to compare

  • JoinableExecutorService: A new class in the concurrent package that enhances a standard ExecutorService with the ability for the calling thread to join task execution. This service allows threads to submit groups of tasks and then participate directly in executing those tasks, aiding in faster completion and improved resource utilization. It ensures tasks are initiated in iteration order but balances task execution across groups to maintain consistent system performance. This feature is beneficial for applications requiring high throughput and dynamic task management.
  • Fixed a bug that caused the Reflection#newInstance method to throw a NullPointerException when a null was provided for a Nullable parameter.
Bug Fixes
  • Fixed a bug that caused some methods in Sequences to have poor performance if the toString method of a potential Sequence was computationally expensive

Version 1.13.1

01 Oct 20:23

Choose a tag to compare

  • Fixed a bug that caused a NoSuchMethodException to be thrown when using the Reflection utility to call a non-overriden interface-defined default method.

Version 1.13.0

05 Sep 12:31

Choose a tag to compare

  • Added the ByteBuffers#share method that returns a new ByteBuffer containing a shared subseqence of a source ByteBuffer while incrementing the position of the source the same number of bytes that are shared.
  • Upgraded logback dependency to version 1.2.11
  • Fixed a bug in Reflection#call that threw a NoSuchMethodException when trying to call an overriden method that accepts a generic parameter.

Version 1.12.1

30 Aug 19:40

Choose a tag to compare

  • Improved the performance of CountUpLatch by using better synchronization control.
  • Fixed a bug in AnyStrings#tryParseNumber that caused an error to be thrown instead of returning null when parsing strings with a leading E or e followed by digit characters (e.g. e45). These strings were mistaken for a number in scientific notation, but the parser has been fixed so that error no longer occurs.
  • Optimized ByteBuffers#getByteArray to return the backing array of a ByteBuffer if it exists and the position of the ByteBuffer is 0 as well as the number of bytes remaining being equal to its capacity.

Version 1.12.0

08 Dec 19:04

Choose a tag to compare

  • Fixed a bug that made it possible for the ByteBuffer returend from ByteBuffers#get(ByteBuffer int) to have a different byte order than the input source.
  • Deprecated ByteBuffers#encodeAsHex in favor of ByteBuffers#encodeAsHexString.
  • Deprecated ByteBuffers#decodeFromHex in favor of ByteBuffers#decodeFromHexString.

Version 1.11.0

12 Feb 08:45

Choose a tag to compare

  • Added the TriConsumer functional interface that is similar to BiConsumer for three input arguments.