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
formatCommandLineby usingCollectioninstead ofListin 096fe6e - Depth-tracked recursive validation in
ObjectToolsin e218853allEmpty,allNotEmptynow fully recursiveanyEmpty,anyNotEmptyexplicitly shallow-only (direct elements only)- Reimplement
allEmpty/allNotEmpty/isAllNonNullwith iterative DFS stack - Unify null detection via
pushAllOrNull - Fix primitive-array handling
- Simplify
forEach*/checkAnyto any-match only
- Migrate to JSpecify for nullability contracts in 2461a6d
- Removed classpath tools, deprecated in fa4dd3e
- Change
formatCommandLineto work in POSIX-compatible shells in 0940cb7 - Refactor
ClasspathToolsinto "PathToolsand addformatCommandLine` method in ef1cc4e - Refactor
ObjectToolsand 'TextTools' to use message suppliers in 57b28d9 - Add
requireNotBlank(Collection)andrequireNotEmpty(Collectionto 'TextTools' in 8eeb84d - Refactor `ObjectTools' to prevent stack overflow on deep nesting in 0ce17ad
- Switch
isAllNonNullfrom recursive to iterative with cap - Add
ZERO_BY_TYPEmap - Use reference equality for fast path
- Switch
- 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 exceptionsSystemTools: Remove xterm from CygwinTERMdetection; add ARM/x86/WSL architecture detection with cachingCollectionTools: null-safe mapping, better logging, normalized paths; add null-mapper safety and consistent path normalizationIOTools: Add blank/invalid path guards; make mkdirs catch all exceptions; normalize path resolution in resolveObjectTools: Optimize primitive array iteration; add cached predicates; tighten container checks
- Add
createDirsmethods 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
ObjectToolsnull/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