Skip to content

Commit 7112494

Browse files
dfa1claude
andcommitted
refactor: initialize all instance fields in constructors
Drop inline field initializers across the context and stream classes so every instance field is assigned in the constructor. In the NativeObject streams arena is assigned right after super() and before the try, so the catch's close() -> tryClose() -> arena.close() cleanup still holds. Convention only; no checkstyle rule enforces it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent e5dcea1 commit 7112494

5 files changed

Lines changed: 30 additions & 15 deletions

File tree

zstd/src/main/java/io/github/dfa1/zstd/ZstdCompressCtx.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@
1919
/// }
2020
public final class ZstdCompressCtx extends NativeObject {
2121

22-
private int level = Zstd.defaultCompressionLevel();
22+
private int level;
2323

2424
/// Creates a new compression context at the default level.
2525
public ZstdCompressCtx() {
2626
super(create());
27+
this.level = Zstd.defaultCompressionLevel();
2728
}
2829

2930
private static MemorySegment create() {

zstd/src/main/java/io/github/dfa1/zstd/ZstdCompressStream.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
/// Not thread-safe: confine an instance to a single thread.
3131
public final class ZstdCompressStream extends NativeObject {
3232

33-
private final Arena arena = Arena.ofConfined();
34-
private final ZstdStreamBuffer in = new ZstdStreamBuffer(arena);
35-
private final ZstdStreamBuffer out = new ZstdStreamBuffer(arena);
33+
private final Arena arena;
34+
private final ZstdStreamBuffer in;
35+
private final ZstdStreamBuffer out;
3636

3737
/// Creates a streaming compressor at the default level.
3838
public ZstdCompressStream() {
@@ -54,6 +54,9 @@ public ZstdCompressStream(int level, ZstdDictionary dictionary) {
5454
// Own the context first, so any failure setting it up is cleaned up by
5555
// close() — one release path, no leak on a half-built stream.
5656
super(createCctx());
57+
this.arena = Arena.ofConfined();
58+
this.in = new ZstdStreamBuffer(arena);
59+
this.out = new ZstdStreamBuffer(arena);
5760
try {
5861
NativeCall.checkReturnValue(() -> (long) Bindings.CCTX_SET_PARAMETER.invokeExact(
5962
ptr(), ZstdCompressParameter.COMPRESSION_LEVEL.value(), level));

zstd/src/main/java/io/github/dfa1/zstd/ZstdDecompressStream.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
/// Not thread-safe: confine an instance to a single thread.
1515
public final class ZstdDecompressStream extends NativeObject {
1616

17-
private final Arena arena = Arena.ofConfined();
18-
private final ZstdStreamBuffer in = new ZstdStreamBuffer(arena);
19-
private final ZstdStreamBuffer out = new ZstdStreamBuffer(arena);
17+
private final Arena arena;
18+
private final ZstdStreamBuffer in;
19+
private final ZstdStreamBuffer out;
2020

2121
/// Creates a streaming decompressor.
2222
public ZstdDecompressStream() {
@@ -30,6 +30,9 @@ public ZstdDecompressStream(ZstdDictionary dictionary) {
3030
// Own the context first, so any failure setting it up is cleaned up by
3131
// close() — one release path, no leak on a half-built stream.
3232
super(createDctx());
33+
this.arena = Arena.ofConfined();
34+
this.in = new ZstdStreamBuffer(arena);
35+
this.out = new ZstdStreamBuffer(arena);
3336
try {
3437
if (dictionary != null) {
3538
loadDictionary(dictionary);

zstd/src/main/java/io/github/dfa1/zstd/ZstdInputStream.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@
2828
public final class ZstdInputStream extends InputStream {
2929

3030
private final InputStream in;
31-
private final Arena arena = Arena.ofConfined();
31+
private final Arena arena;
3232
private final MemorySegment dctx;
3333
private final MemorySegment inSeg;
3434
private final MemorySegment outSeg;
3535
private final long outCap;
36-
private final ZstdStreamBuffer inBuf = new ZstdStreamBuffer(arena);
37-
private final ZstdStreamBuffer outBufView = new ZstdStreamBuffer(arena);
36+
private final ZstdStreamBuffer inBuf;
37+
private final ZstdStreamBuffer outBufView;
3838
private final byte[] feed;
3939
private final byte[] hold;
40-
private final byte[] single = new byte[1];
40+
private final byte[] single;
4141
private int holdStart;
4242
private int holdEnd;
4343
private boolean inputEof;
@@ -59,6 +59,10 @@ public ZstdInputStream(InputStream in) {
5959
/// @param dictionary the dictionary the frame was compressed against, or `null` for none
6060
public ZstdInputStream(InputStream in, ZstdDictionary dictionary) {
6161
this.in = Objects.requireNonNull(in, "in");
62+
this.arena = Arena.ofConfined();
63+
this.inBuf = new ZstdStreamBuffer(arena);
64+
this.outBufView = new ZstdStreamBuffer(arena);
65+
this.single = new byte[1];
6266
MemorySegment d = null;
6367
try {
6468
d = (MemorySegment) Bindings.CREATE_DCTX.invokeExact();

zstd/src/main/java/io/github/dfa1/zstd/ZstdOutputStream.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,16 @@ public final class ZstdOutputStream extends OutputStream {
3535
private static final int ZSTD_E_END = 2;
3636

3737
private final OutputStream out;
38-
private final Arena arena = Arena.ofConfined();
38+
private final Arena arena;
3939
private final MemorySegment cctx;
4040
private final MemorySegment inSeg;
4141
private final MemorySegment outSeg;
4242
private final long inCap;
4343
private final long outCap;
44-
private final ZstdStreamBuffer in = new ZstdStreamBuffer(arena);
45-
private final ZstdStreamBuffer outBuf = new ZstdStreamBuffer(arena);
44+
private final ZstdStreamBuffer in;
45+
private final ZstdStreamBuffer outBuf;
4646
private final byte[] drain;
47-
private final byte[] single = new byte[1];
47+
private final byte[] single;
4848
private boolean closed;
4949

5050
/// Wraps `out`, compressing at the library default level.
@@ -96,6 +96,10 @@ private void setPledgedSrcSize(long pledgedSrcSize) {
9696
/// @param dictionary the dictionary to compress against, or `null` for none
9797
public ZstdOutputStream(OutputStream out, int level, ZstdDictionary dictionary) {
9898
this.out = Objects.requireNonNull(out, "out");
99+
this.arena = Arena.ofConfined();
100+
this.in = new ZstdStreamBuffer(arena);
101+
this.outBuf = new ZstdStreamBuffer(arena);
102+
this.single = new byte[1];
99103
MemorySegment c = null;
100104
try {
101105
c = (MemorySegment) Bindings.CREATE_CCTX.invokeExact();

0 commit comments

Comments
 (0)