From 8f64d351ac354ece09e9fd6469a84bfc9767cec7 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Mon, 9 Feb 2026 13:03:59 +0000 Subject: [PATCH] remove more nullability --- .../Compressors/ADC/ADCStream.Async.cs | 12 ++++----- .../Compressors/ADC/ADCStream.cs | 2 +- .../Compressors/LZMA/LzmaDecoder.Async.cs | 12 ++++++--- .../Compressors/LZMA/LzmaDecoder.cs | 11 +++++--- .../Compressors/PPMd/PpmdStream.cs | 26 ++++++++++++++----- .../Compressors/Rar/RarStream.Async.cs | 4 +-- src/SharpCompress/Compressors/Xz/XZStream.cs | 6 ++++- .../Readers/Ace/MultiVolumeAceReader.cs | 21 ++++++++------- .../Readers/Arj/MultiVolumeArjReader.cs | 17 +++++++----- .../Readers/Rar/MultiVolumeRarReader.Async.cs | 15 ++++++----- .../Readers/Rar/MultiVolumeRarReader.cs | 17 +++++++----- 11 files changed, 90 insertions(+), 53 deletions(-) diff --git a/src/SharpCompress/Compressors/ADC/ADCStream.Async.cs b/src/SharpCompress/Compressors/ADC/ADCStream.Async.cs index cf12a8c7..03d260c5 100644 --- a/src/SharpCompress/Compressors/ADC/ADCStream.Async.cs +++ b/src/SharpCompress/Compressors/ADC/ADCStream.Async.cs @@ -24,8 +24,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#nullable disable - using System; using System.IO; using System.Threading; @@ -78,11 +76,12 @@ public sealed partial class ADCStream var toCopy = count; var copied = 0; - while (_outPosition + toCopy >= _outBuffer.Length) + var outBuf = _outBuffer.NotNull(); + while (_outPosition + toCopy >= outBuf.Length) { cancellationToken.ThrowIfCancellationRequested(); - var piece = _outBuffer.Length - _outPosition; - Array.Copy(_outBuffer, _outPosition, buffer, inPosition, piece); + var piece = outBuf.Length - _outPosition; + Array.Copy(outBuf, _outPosition, buffer, inPosition, piece); inPosition += piece; copied += piece; _position += piece; @@ -97,9 +96,10 @@ public sealed partial class ADCStream { return copied; } + outBuf = _outBuffer; } - Array.Copy(_outBuffer, _outPosition, buffer, inPosition, toCopy); + Array.Copy(outBuf, _outPosition, buffer, inPosition, toCopy); _outPosition += toCopy; _position += toCopy; copied += toCopy; diff --git a/src/SharpCompress/Compressors/ADC/ADCStream.cs b/src/SharpCompress/Compressors/ADC/ADCStream.cs index e44dc02d..550c4dfc 100644 --- a/src/SharpCompress/Compressors/ADC/ADCStream.cs +++ b/src/SharpCompress/Compressors/ADC/ADCStream.cs @@ -24,7 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. - using System; +using System; using System.IO; using System.Threading; using System.Threading.Tasks; diff --git a/src/SharpCompress/Compressors/LZMA/LzmaDecoder.Async.cs b/src/SharpCompress/Compressors/LZMA/LzmaDecoder.Async.cs index 10ac3bf2..08946f73 100644 --- a/src/SharpCompress/Compressors/LZMA/LzmaDecoder.Async.cs +++ b/src/SharpCompress/Compressors/LZMA/LzmaDecoder.Async.cs @@ -22,7 +22,8 @@ public partial class Decoder : ICoder, ISetDecoderProperties == 0 ) { - return await _lowCoder[posState].NotNull() + return await _lowCoder[posState] + .NotNull() .DecodeAsync(rangeDecoder, cancellationToken) .ConfigureAwait(false); } @@ -32,7 +33,8 @@ public partial class Decoder : ICoder, ISetDecoderProperties == 0 ) { - symbol += await _midCoder[posState].NotNull() + symbol += await _midCoder[posState] + .NotNull() .DecodeAsync(rangeDecoder, cancellationToken) .ConfigureAwait(false); } @@ -106,7 +108,8 @@ public partial class Decoder : ICoder, ISetDecoderProperties byte prevByte, CancellationToken cancellationToken = default ) => - await _coders.NotNull()[GetState(pos, prevByte)] + await _coders + .NotNull()[GetState(pos, prevByte)] .DecodeNormalAsync(rangeDecoder, cancellationToken) .ConfigureAwait(false); @@ -117,7 +120,8 @@ public partial class Decoder : ICoder, ISetDecoderProperties byte matchByte, CancellationToken cancellationToken = default ) => - await _coders.NotNull()[GetState(pos, prevByte)] + await _coders + .NotNull()[GetState(pos, prevByte)] .DecodeWithMatchByteAsync(rangeDecoder, matchByte, cancellationToken) .ConfigureAwait(false); } diff --git a/src/SharpCompress/Compressors/LZMA/LzmaDecoder.cs b/src/SharpCompress/Compressors/LZMA/LzmaDecoder.cs index 1d3a75b4..07509d08 100644 --- a/src/SharpCompress/Compressors/LZMA/LzmaDecoder.cs +++ b/src/SharpCompress/Compressors/LZMA/LzmaDecoder.cs @@ -13,8 +13,12 @@ public partial class Decoder : ICoder, ISetDecoderProperties // ,System.IO.Strea { private BitDecoder _choice = new(); private BitDecoder _choice2 = new(); - private readonly BitTreeDecoder?[] _lowCoder = new BitTreeDecoder?[Base.K_NUM_POS_STATES_MAX]; - private readonly BitTreeDecoder?[] _midCoder = new BitTreeDecoder?[Base.K_NUM_POS_STATES_MAX]; + private readonly BitTreeDecoder?[] _lowCoder = new BitTreeDecoder?[ + Base.K_NUM_POS_STATES_MAX + ]; + private readonly BitTreeDecoder?[] _midCoder = new BitTreeDecoder?[ + Base.K_NUM_POS_STATES_MAX + ]; private BitTreeDecoder _highCoder = new(Base.K_NUM_HIGH_LEN_BITS); private uint _numPosStates; @@ -151,7 +155,8 @@ public partial class Decoder : ICoder, ISetDecoderProperties // ,System.IO.Strea uint pos, byte prevByte, byte matchByte - ) => _coders.NotNull()[GetState(pos, prevByte)].DecodeWithMatchByte(rangeDecoder, matchByte); + ) => + _coders.NotNull()[GetState(pos, prevByte)].DecodeWithMatchByte(rangeDecoder, matchByte); } private OutWindow? _outWindow; diff --git a/src/SharpCompress/Compressors/PPMd/PpmdStream.cs b/src/SharpCompress/Compressors/PPMd/PpmdStream.cs index 6a6d0aba..e8ee44f8 100644 --- a/src/SharpCompress/Compressors/PPMd/PpmdStream.cs +++ b/src/SharpCompress/Compressors/PPMd/PpmdStream.cs @@ -244,7 +244,8 @@ public class PpmdStream : Stream var size = 0; if (_properties.Version == PpmdVersion.I1) { - size = await _model.NotNull() + size = await _model + .NotNull() .DecodeBlockAsync(_stream, buffer, offset, count, cancellationToken) .ConfigureAwait(false); } @@ -253,7 +254,12 @@ public class PpmdStream : Stream int c; while ( size < count - && (c = await _modelH.NotNull().DecodeCharAsync(cancellationToken).ConfigureAwait(false)) >= 0 + && ( + c = await _modelH + .NotNull() + .DecodeCharAsync(cancellationToken) + .ConfigureAwait(false) + ) >= 0 ) { buffer[offset++] = (byte)c; @@ -266,7 +272,8 @@ public class PpmdStream : Stream while ( size < count && ( - c = await _modelH.NotNull() + c = await _modelH + .NotNull() .DecodeCharAsync(_decoder.NotNull(), cancellationToken) .ConfigureAwait(false) ) >= 0 @@ -301,7 +308,8 @@ public class PpmdStream : Stream { // Need to use a temporary buffer since DecodeBlockAsync works with byte[] var tempBuffer = new byte[count]; - size = await _model.NotNull() + size = await _model + .NotNull() .DecodeBlockAsync(_stream, tempBuffer, 0, count, cancellationToken) .ConfigureAwait(false); tempBuffer.AsMemory(0, size).CopyTo(buffer); @@ -311,7 +319,12 @@ public class PpmdStream : Stream int c; while ( size < count - && (c = await _modelH.NotNull().DecodeCharAsync(cancellationToken).ConfigureAwait(false)) >= 0 + && ( + c = await _modelH + .NotNull() + .DecodeCharAsync(cancellationToken) + .ConfigureAwait(false) + ) >= 0 ) { buffer.Span[offset++] = (byte)c; @@ -324,7 +337,8 @@ public class PpmdStream : Stream while ( size < count && ( - c = await _modelH.NotNull() + c = await _modelH + .NotNull() .DecodeCharAsync(_decoder.NotNull(), cancellationToken) .ConfigureAwait(false) ) >= 0 diff --git a/src/SharpCompress/Compressors/Rar/RarStream.Async.cs b/src/SharpCompress/Compressors/Rar/RarStream.Async.cs index 4ea0651d..6518264c 100644 --- a/src/SharpCompress/Compressors/Rar/RarStream.Async.cs +++ b/src/SharpCompress/Compressors/Rar/RarStream.Async.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Buffers; using System.IO; @@ -47,7 +45,7 @@ internal partial class RarStream if (tmpCount > 0) { var toCopy = tmpCount < count ? tmpCount : count; - Buffer.BlockCopy(tmpBuffer, tmpOffset, buffer, offset, toCopy); + Buffer.BlockCopy(tmpBuffer.NotNull(), tmpOffset, buffer, offset, toCopy); tmpOffset += toCopy; tmpCount -= toCopy; offset += toCopy; diff --git a/src/SharpCompress/Compressors/Xz/XZStream.cs b/src/SharpCompress/Compressors/Xz/XZStream.cs index eb255524..09c35910 100644 --- a/src/SharpCompress/Compressors/Xz/XZStream.cs +++ b/src/SharpCompress/Compressors/Xz/XZStream.cs @@ -128,5 +128,9 @@ public sealed partial class XZStream : XZReadOnlyStream } private void NextBlock() => - _currentBlock = new XZBlock(BaseStream, Header.NotNull().BlockCheckType, Header.NotNull().BlockCheckSize); + _currentBlock = new XZBlock( + BaseStream, + Header.NotNull().BlockCheckType, + Header.NotNull().BlockCheckSize + ); } diff --git a/src/SharpCompress/Readers/Ace/MultiVolumeAceReader.cs b/src/SharpCompress/Readers/Ace/MultiVolumeAceReader.cs index 0b000f12..32122e38 100644 --- a/src/SharpCompress/Readers/Ace/MultiVolumeAceReader.cs +++ b/src/SharpCompress/Readers/Ace/MultiVolumeAceReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections; using System.Collections.Generic; @@ -15,7 +13,7 @@ namespace SharpCompress.Readers.Ace; internal class MultiVolumeAceReader : AceReader { private readonly IEnumerator streams; - private Stream tempStream; + private Stream? tempStream; internal MultiVolumeAceReader(IEnumerable streams, ReaderOptions options) : base(options) => this.streams = streams.GetEnumerator(); @@ -54,13 +52,13 @@ internal class MultiVolumeAceReader : AceReader { private readonly MultiVolumeAceReader reader; private readonly IEnumerator nextReadableStreams; - private Stream tempStream; + private Stream? tempStream; private bool isFirst = true; internal MultiVolumeStreamEnumerator( MultiVolumeAceReader r, IEnumerator nextReadableStreams, - Stream tempStream + Stream? tempStream ) { reader = r; @@ -72,7 +70,12 @@ internal class MultiVolumeAceReader : AceReader IEnumerator IEnumerable.GetEnumerator() => this; - public FilePart Current { get; private set; } + private FilePart? _current; + public FilePart Current + { + get => _current.NotNull(); + private set => _current = value; + } public void Dispose() { } @@ -82,7 +85,7 @@ internal class MultiVolumeAceReader : AceReader { if (isFirst) { - Current = reader.Entry.Parts.First(); + _current = reader.Entry.Parts.First(); isFirst = false; //first stream already to go return true; } @@ -93,7 +96,7 @@ internal class MultiVolumeAceReader : AceReader } if (tempStream != null) { - reader.LoadStreamForReading(tempStream); + reader.LoadStreamForReading(tempStream.NotNull()); tempStream = null; } else if (!nextReadableStreams.MoveNext()) @@ -107,7 +110,7 @@ internal class MultiVolumeAceReader : AceReader reader.LoadStreamForReading(nextReadableStreams.Current); } - Current = reader.Entry.Parts.First(); + _current = reader.Entry.Parts.First(); return true; } diff --git a/src/SharpCompress/Readers/Arj/MultiVolumeArjReader.cs b/src/SharpCompress/Readers/Arj/MultiVolumeArjReader.cs index 547541ef..4e283661 100644 --- a/src/SharpCompress/Readers/Arj/MultiVolumeArjReader.cs +++ b/src/SharpCompress/Readers/Arj/MultiVolumeArjReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections; using System.Collections.Generic; @@ -16,7 +14,7 @@ namespace SharpCompress.Readers.Arj; internal class MultiVolumeArjReader : ArjReader { private readonly IEnumerator streams; - private Stream tempStream; + private Stream? tempStream; internal MultiVolumeArjReader(IEnumerable streams, ReaderOptions options) : base(options) => this.streams = streams.GetEnumerator(); @@ -55,13 +53,13 @@ internal class MultiVolumeArjReader : ArjReader { private readonly MultiVolumeArjReader reader; private readonly IEnumerator nextReadableStreams; - private Stream tempStream; + private Stream? tempStream; private bool isFirst = true; internal MultiVolumeStreamEnumerator( MultiVolumeArjReader r, IEnumerator nextReadableStreams, - Stream tempStream + Stream? tempStream ) { reader = r; @@ -73,7 +71,12 @@ internal class MultiVolumeArjReader : ArjReader IEnumerator IEnumerable.GetEnumerator() => this; - public FilePart Current { get; private set; } + private FilePart? _current; + public FilePart Current + { + get => _current.NotNull(); + private set => _current = value; + } public void Dispose() { } @@ -94,7 +97,7 @@ internal class MultiVolumeArjReader : ArjReader } if (tempStream != null) { - reader.LoadStreamForReading(tempStream); + reader.LoadStreamForReading(tempStream.NotNull()); tempStream = null; } else if (!nextReadableStreams.MoveNext()) diff --git a/src/SharpCompress/Readers/Rar/MultiVolumeRarReader.Async.cs b/src/SharpCompress/Readers/Rar/MultiVolumeRarReader.Async.cs index 7107adba..c0492535 100644 --- a/src/SharpCompress/Readers/Rar/MultiVolumeRarReader.Async.cs +++ b/src/SharpCompress/Readers/Rar/MultiVolumeRarReader.Async.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections; using System.Collections.Generic; using System.IO; @@ -26,13 +24,13 @@ internal partial class MultiVolumeRarReader : RarReader { private readonly MultiVolumeRarReader reader; private readonly IEnumerator nextReadableStreams; - private Stream tempStream; + private Stream? tempStream; private bool isFirst = true; internal MultiVolumeStreamAsyncEnumerator( MultiVolumeRarReader r, IEnumerator nextReadableStreams, - Stream tempStream + Stream? tempStream ) { reader = r; @@ -40,7 +38,12 @@ internal partial class MultiVolumeRarReader : RarReader this.tempStream = tempStream; } - public FilePart Current { get; private set; } + private FilePart? _current; + public FilePart Current + { + get => _current.NotNull(); + private set => _current = value; + } public async ValueTask MoveNextAsync() { @@ -57,7 +60,7 @@ internal partial class MultiVolumeRarReader : RarReader } if (tempStream != null) { - await reader.LoadStreamForReadingAsync(tempStream); + await reader.LoadStreamForReadingAsync(tempStream.NotNull()); tempStream = null; } else if (!nextReadableStreams.MoveNext()) diff --git a/src/SharpCompress/Readers/Rar/MultiVolumeRarReader.cs b/src/SharpCompress/Readers/Rar/MultiVolumeRarReader.cs index dd811bc5..f3df9ef6 100644 --- a/src/SharpCompress/Readers/Rar/MultiVolumeRarReader.cs +++ b/src/SharpCompress/Readers/Rar/MultiVolumeRarReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections; using System.Collections.Generic; using System.IO; @@ -14,7 +12,7 @@ namespace SharpCompress.Readers.Rar; internal partial class MultiVolumeRarReader : RarReader { private readonly IEnumerator streams; - private Stream tempStream; + private Stream? tempStream; internal MultiVolumeRarReader(IEnumerable streams, ReaderOptions options) : base(options) => this.streams = streams.GetEnumerator(); @@ -55,13 +53,13 @@ internal partial class MultiVolumeRarReader : RarReader { private readonly MultiVolumeRarReader reader; private readonly IEnumerator nextReadableStreams; - private Stream tempStream; + private Stream? tempStream; private bool isFirst = true; internal MultiVolumeStreamEnumerator( MultiVolumeRarReader r, IEnumerator nextReadableStreams, - Stream tempStream + Stream? tempStream ) { reader = r; @@ -73,7 +71,12 @@ internal partial class MultiVolumeRarReader : RarReader IEnumerator IEnumerable.GetEnumerator() => this; - public FilePart Current { get; private set; } + private FilePart? _current; + public FilePart Current + { + get => _current.NotNull(); + private set => _current = value; + } public void Dispose() { } @@ -94,7 +97,7 @@ internal partial class MultiVolumeRarReader : RarReader } if (tempStream != null) { - reader.LoadStreamForReading(tempStream); + reader.LoadStreamForReading(tempStream.NotNull()); tempStream = null; } else if (!nextReadableStreams.MoveNext())