Skip to content

Commit c8efd73

Browse files
dfa1claude
andcommitted
fix(sonar): array-aware equals/hashCode/toString on ZstdEncodingEncoder records
SonarCloud flagged the private FrameLayout (long[] components) and Frames (byte[] metadata) records as reliability bugs (java:S6218): a record with array components gets a default equals/hashCode that compares array identity, not content. Both are BUG-severity and fail the new-code reliability gate. Fix by overriding equals/hashCode/toString with Arrays.equals/hashCode/toString (and Objects for the List/scalar fields) so they consider array content, rather than suppressing the rule. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 3c98966 commit c8efd73

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

writer/src/main/java/io/github/dfa1/vortex/writer/encode/ZstdEncodingEncoder.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
import java.lang.foreign.ValueLayout;
1515
import java.nio.charset.StandardCharsets;
1616
import java.util.ArrayList;
17+
import java.util.Arrays;
1718
import java.util.List;
19+
import java.util.Objects;
1820

1921
/// Write-only encoder for `vortex.zstd`.
2022
///
@@ -145,10 +147,41 @@ private EncodeResult buildNullableResult(
145147

146148
/// Byte spans and value counts of each frame; spans sum to the payload size.
147149
private record FrameLayout(long[] byteLengths, long[] valueCounts) {
150+
@Override
151+
public boolean equals(Object o) {
152+
return o instanceof FrameLayout(long[] bl, long[] vc)
153+
&& Arrays.equals(byteLengths, bl) && Arrays.equals(valueCounts, vc);
154+
}
155+
156+
@Override
157+
public int hashCode() {
158+
return 31 * Arrays.hashCode(byteLengths) + Arrays.hashCode(valueCounts);
159+
}
160+
161+
@Override
162+
public String toString() {
163+
return "FrameLayout[byteLengths=" + Arrays.toString(byteLengths)
164+
+ ", valueCounts=" + Arrays.toString(valueCounts) + "]";
165+
}
148166
}
149167

150168
/// Compressed frame payloads paired with the encoded `ZstdMetadata` describing them.
151169
private record Frames(List<MemorySegment> compressed, byte[] metadata) {
170+
@Override
171+
public boolean equals(Object o) {
172+
return o instanceof Frames(List<MemorySegment> c, byte[] m)
173+
&& Objects.equals(compressed, c) && Arrays.equals(metadata, m);
174+
}
175+
176+
@Override
177+
public int hashCode() {
178+
return 31 * Objects.hashCode(compressed) + Arrays.hashCode(metadata);
179+
}
180+
181+
@Override
182+
public String toString() {
183+
return "Frames[compressed=" + compressed + ", metadata=" + Arrays.toString(metadata) + "]";
184+
}
152185
}
153186

154187
private static int[] frameBufferIndices(int frameCount, int base) {

0 commit comments

Comments
 (0)