Skip to content

1.3.0

Latest

Choose a tag to compare

@ethauvin ethauvin released this 10 Sep 02:34
26f0883

Summary

  • Added ProcessExecutor for executing external processes with timeout, environment, and I/O capture
  • Refactored and hardened core utilities - ObjectTools, TextTools, IOTools, CollectionTools, and SystemTools with tighter validations, null-safety, and stack-overflow prevention
  • Refactored ObjectTools emptiness API to use depth-tracked recursive validation with iterative DFS
  • Refactored ClasspathTools into PathTools and added formatCommandLine utility
  • Removed deprecated classpath tools
  • Migrated nullability contracts to JSpecify

What's Changed in 1.3.0

  • Destroy timed-out process tree before exitValue and normalize timeout exit code to -1 for macOS compatibility in c23df46
  • Widen formatCommandLine by using Collection instead of List in 096fe6e
  • Depth-tracked recursive validation in ObjectTools in e218853
    • allEmpty, allNotEmpty now fully recursive
    • anyEmpty, anyNotEmpty explicitly shallow-only (direct elements only)
    • Reimplement allEmpty/allNotEmpty/isAllNonNull with iterative DFS stack
    • Unify null detection via pushAllOrNull
    • Fix primitive-array handling
    • Simplify forEach* / checkAny to any-match only
  • Migrate to JSpecify for nullability contracts in 2461a6d
  • Removed classpath tools, deprecated in fa4dd3e
  • Change formatCommandLine to work in POSIX-compatible shells in 0940cb7
  • Refactor ClasspathTools into "PathToolsand addformatCommandLine` method in ef1cc4e
  • Refactor ObjectTools and 'TextTools' to use message suppliers in 57b28d9
  • Add requireNotBlank(Collection) and requireNotEmpty(Collection to 'TextTools' in 8eeb84d
  • Refactor `ObjectTools' to prevent stack overflow on deep nesting in 0ce17ad
    • Switch isAllNonNull from recursive to iterative with cap
    • Add ZERO_BY_TYPE map
    • Use reference equality for fast path
  • Add 'requireNegative' and 'requireNonNegative' methods in 8d64906
  • Add 'requirePositive' methods in f0faa5a
  • Harden utils, tighten validations, fix Cygwin heuristics, and expand OS/architecture detection in a736431
    • ProcessExecutor: Add null/blank checks for command + env entries; fix timeout join + exit code handling; ignore outputConsumer exceptions
    • SystemTools: Remove xterm from Cygwin TERM detection; add ARM/x86/WSL architecture detection with caching
    • CollectionTools: null-safe mapping, better logging, normalized paths; add null-mapper safety and consistent path normalization
    • IOTools: Add blank/invalid path guards; make mkdirs catch all exceptions; normalize path resolution in resolve
    • ObjectTools: Optimize primitive array iteration; add cached predicates; tighten container checks
  • Add createDirs methods in e9aa021
  • Unify emptiness API with recursive container support, fix edge-case semantics, and tighten validation. in b9d16e6
    • Unify all predicates to Object with recursive container support
    • Fix empty-container logic
    • Make validators recursive
    • Add validation for null/empty/blank messages
    • Add logging for string formatting failures with fallback
    • Refactor tests for new API and exception rules
  • Split ObjectTools null/empty validation to NPE/IAE in 39601df
  • Change timeout from int to long in d5916e8
  • ProcessExecutor cleanup, make inheritIO/outputConsumer orthogonal in 226df37
  • Add ProcessExecutor with timeout, env, and I/O capture in 3c14c1d

Full Changelog: 1.2.0...1.3.0