Conversation
|
There was a problem hiding this comment.
Pull request overview
This PR continues the “Extend/Update API” series by expanding utility APIs (notably FileUtils and ArrayUtils), adding/expanding unit tests, and standardizing/refreshing Javadocs across a wide portion of the library. It also bumps the project version to the next alpha.
Changes:
- Expanded
FileUtilsAPI surface and significantly increasedFileUtilsTestcoverage for path/extension, delete, walk/tree, unzip, and relativize behaviors. - Refactored and extended
ArrayUtils(new/adjusted overloads, renamedgetComponentType→resolveComponentType) and introduced a large newArrayUtilsTest. - Broad Javadoc modernization across many public APIs + version bump (
10.0.alpha13).
Reviewed changes
Copilot reviewed 65 out of 66 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| rlib-io/src/test/java/javasabr/rlib/io/FileUtilsTest.java | Adds extensive tests for FileUtils behaviors (extensions, delete, stream, unzip, etc.). |
| rlib-io/src/main/java/javasabr/rlib/io/util/FileUtils.java | Adds/updates public APIs and Javadocs for common file/path operations. |
| rlib-common/src/test/java/javasabr/rlib/common/util/ArrayUtilsTest.java | New comprehensive unit test suite for ArrayUtils. |
| rlib-common/src/main/java/javasabr/rlib/common/util/os/OperatingSystemResolver.java | Javadoc cleanup/modernization. |
| rlib-common/src/main/java/javasabr/rlib/common/util/os/OperatingSystem.java | Removes redundant field/getter/setter Javadocs; updates class doc. |
| rlib-common/src/main/java/javasabr/rlib/common/util/Utils.java | Updates class-level documentation. |
| rlib-common/src/main/java/javasabr/rlib/common/util/ThreadUtils.java | Adds method-level Javadoc to sleep. |
| rlib-common/src/main/java/javasabr/rlib/common/util/StringUtils.java | Javadoc wording/consistency improvements. |
| rlib-common/src/main/java/javasabr/rlib/common/util/ReflectionUtils.java | Class-level Javadoc update. |
| rlib-common/src/main/java/javasabr/rlib/common/util/PropertyLoader.java | Adds class/method documentation. |
| rlib-common/src/main/java/javasabr/rlib/common/util/ObjectUtils.java | Updates class-level documentation. |
| rlib-common/src/main/java/javasabr/rlib/common/util/NumberedEnumMap.java | Adds richer Javadocs for map behavior and APIs. |
| rlib-common/src/main/java/javasabr/rlib/common/util/NumberedEnum.java | Adds interface/method Javadocs. |
| rlib-common/src/main/java/javasabr/rlib/common/util/NumberUtils.java | Updates class-level documentation. |
| rlib-common/src/main/java/javasabr/rlib/common/util/GroupThreadFactory.java | Adds extensive constructor/interface Javadocs. |
| rlib-common/src/main/java/javasabr/rlib/common/util/ExtMath.java | Javadoc cleanup + minor formatting improvements. |
| rlib-common/src/main/java/javasabr/rlib/common/util/DateUtils.java | Updates class-level documentation. |
| rlib-common/src/main/java/javasabr/rlib/common/util/CycleBuffer.java | Javadoc cleanup and clarification. |
| rlib-common/src/main/java/javasabr/rlib/common/util/ClassUtils.java | Adds Javadocs to commonType overloads. |
| rlib-common/src/main/java/javasabr/rlib/common/util/BufferUtils.java | Adds/cleans up method Javadocs. |
| rlib-common/src/main/java/javasabr/rlib/common/util/AsyncUtils.java | Adds detailed Javadocs to async helpers. |
| rlib-common/src/main/java/javasabr/rlib/common/util/ArrayUtils.java | Refactors APIs, adds docs, renames component-type helper, adjusts overloads. |
| rlib-common/src/main/java/javasabr/rlib/common/util/AliasedEnumMap.java | Adds richer Javadocs for alias mapping behavior. |
| rlib-common/src/main/java/javasabr/rlib/common/tuple/Tuple.java | Adds record-level Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/tuple/LongRefTuple.java | Adds record-level Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/tuple/IntRefTuple.java | Adds record-level Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/TriplePredicate.java | Adds/cleans up functional-interface Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/TripleFunction.java | Javadoc modernization + @since. |
| rlib-common/src/main/java/javasabr/rlib/common/function/TripleConsumer.java | Javadoc modernization + @since. |
| rlib-common/src/main/java/javasabr/rlib/common/function/SafeTriFunction.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/SafeSupplier.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/SafeRunnable.java | Javadoc cleanup. |
| rlib-common/src/main/java/javasabr/rlib/common/function/SafeFunction.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/SafeFactory.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/SafeConsumer.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/SafeBiFunction.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/SafeBiConsumer.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/ObjectLongPredicate.java | Javadoc modernization. |
| rlib-common/src/main/java/javasabr/rlib/common/function/ObjectIntFunction.java | Javadoc modernization. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NullableSupplier.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NotNullSafeTriFunction.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NotNullSafeSupplier.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NotNullSafeFunction.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NotNullSafeFactory.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NotNullSafeConsumer.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NotNullSafeBiFunction.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NotNullSafeBiConsumer.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NotNullConsumer.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/NotNullBiConsumer.java | Adds full Javadoc. |
| rlib-common/src/main/java/javasabr/rlib/common/function/LongObjectPredicate.java | Javadoc cleanup (and fixes garbled text). |
| rlib-common/src/main/java/javasabr/rlib/common/function/LongBiObjectConsumer.java | Javadoc modernization. |
| rlib-common/src/main/java/javasabr/rlib/common/function/IntObjectPredicate.java | Javadoc modernization. |
| rlib-common/src/main/java/javasabr/rlib/common/function/IntBiObjectConsumer.java | Javadoc modernization. |
| rlib-common/src/main/java/javasabr/rlib/common/function/Functions.java | Adds Javadocs to functional factories. |
| rlib-common/src/main/java/javasabr/rlib/common/function/FunctionInt.java | Javadoc modernization. |
| rlib-common/src/main/java/javasabr/rlib/common/function/FloatConsumer.java | Javadoc modernization. |
| rlib-common/src/main/java/javasabr/rlib/common/function/FloatBiObjectConsumer.java | Adds Javadocs. |
| rlib-common/src/main/java/javasabr/rlib/common/function/DoubleObjectConsumer.java | Javadoc modernization. |
| rlib-common/src/main/java/javasabr/rlib/common/function/CharSupplier.java | Removes redundant author tag. |
| rlib-common/src/main/java/javasabr/rlib/common/ThreadSafe.java | Improves marker interface documentation. |
| rlib-common/src/main/java/javasabr/rlib/common/Copyable.java | Adds interface/method Javadocs. |
| rlib-collections/src/main/java/javasabr/rlib/collections/array/impl/ImmutableArray.java | Updates to renamed ArrayUtils.resolveComponentType. |
| build.gradle | Bumps root project version to 10.0.alpha13. |
| README.md | Updates sample rlibVersion to 10.0.alpha13. |
| .github/skills/generate-javadoc.md | Expands and clarifies internal Javadoc generation guidelines. |
| .github/copilot-instructions.md | Adds explicit testing and Javadoc conventions for contributors/tools. |
| var builder = new StringBuilder(); | ||
| if (needType) { | ||
| builder.append("int"); | ||
| } |
There was a problem hiding this comment.
In ArrayUtils.toString(long[] …), when needType is true the prefix appended is "int"; this will produce incorrect output for long arrays (e.g., "int[...]" instead of "long[...]"). Update the prefix to "long" to match the array type (and consider adding/adjusting a test that covers needType=true for long arrays).
| public static <T, A, R> void forEach(T @Nullable [] array, A arg, Function<T, R> getter, BiConsumer<R, A> consumer) { | ||
| if (isNotEmpty(array)) { | ||
| for (T element : array) { | ||
| consumer.accept(getter.apply(element), arg); | ||
| } |
There was a problem hiding this comment.
The forEach overload that takes a getter now always passes the getter result to the consumer, even if the getter returns null. Previously this pattern skipped null sub-elements, so this is a behavioral change that can introduce NPEs in consumers. Either restore the null-skip behavior (and annotate getter as returning @nullable), or update the method contract/javadoc and nullness annotations to explicitly allow null to reach the consumer.
| Path nonExistentDir = Path.of("/non/existent/directory"); | ||
|
|
||
| // when/then: | ||
| assertThatThrownBy(() -> FileUtils.unzip(nonExistentDir, zipFile)) | ||
| .isInstanceOf(IllegalArgumentException.class); |
There was a problem hiding this comment.
Using a hard-coded absolute path ("/non/existent/directory") to represent a missing directory can be flaky across environments/OSes (the path might exist, and Windows path semantics differ). Prefer constructing a guaranteed-nonexistent path under @tempdir (e.g., tempDir.resolve("missing")) to keep the test deterministic.
| Path outputDir = tempDirectory | ||
| .resolve("output") | ||
| .resolve("folder"); | ||
|
|
||
| Files.createDirectories(outputDir); |
There was a problem hiding this comment.
This test uses Files.createTempDirectory (and earlier creates a temp zip file) without any cleanup. That can leave artifacts in the system temp directory (especially in CI). Prefer using JUnit's @tempdir for both locations so JUnit cleans them automatically (or ensure explicit deletion in a finally block).
| // given: | ||
| String[] source = {"1", "2", "3"}; | ||
| // when: | ||
| Integer[] result = ArrayUtils.map(source, Integer::parseInt, Integer.class); |
There was a problem hiding this comment.
Potential uncaught 'java.lang.NumberFormatException'.
| // given: | ||
| String[] source = {}; | ||
| // when: | ||
| Integer[] result = ArrayUtils.map(source, Integer::parseInt, Integer.class); |
There was a problem hiding this comment.
Potential uncaught 'java.lang.NumberFormatException'.
|
Extend/Update API part 11