From 83ffae9c9293a80762d131c5d191711b306e9143 Mon Sep 17 00:00:00 2001 From: eriawan Date: Fri, 4 Oct 2024 11:58:56 +0700 Subject: [PATCH 1/4] Set encoding param in StreamReader ctor to be nullable --- .../System.Private.CoreLib/src/System/IO/StreamReader.cs | 6 +++--- src/libraries/System.Runtime/ref/System.Runtime.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs b/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs index 9884c4f880bc0..acdc399374725 100644 --- a/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs +++ b/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs @@ -111,12 +111,12 @@ public StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks) { } - public StreamReader(Stream stream, Encoding encoding) + public StreamReader(Stream stream, Encoding? encoding) : this(stream, encoding, true, DefaultBufferSize, false) { } - public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks) + public StreamReader(Stream stream, Encoding? encoding, bool detectEncodingFromByteOrderMarks) : this(stream, encoding, detectEncodingFromByteOrderMarks, DefaultBufferSize, false) { } @@ -131,7 +131,7 @@ public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByt // unicode, and big endian unicode text, but that's it. If neither // of those three match, it will use the Encoding you provided. // - public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) + public StreamReader(Stream stream, Encoding? encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) : this(stream, encoding, detectEncodingFromByteOrderMarks, bufferSize, false) { } diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs index 2bbf0f18cc267..f22d22f78f347 100644 --- a/src/libraries/System.Runtime/ref/System.Runtime.cs +++ b/src/libraries/System.Runtime/ref/System.Runtime.cs @@ -10715,9 +10715,9 @@ public partial class StreamReader : System.IO.TextReader public static readonly new System.IO.StreamReader Null; public StreamReader(System.IO.Stream stream) { } public StreamReader(System.IO.Stream stream, bool detectEncodingFromByteOrderMarks) { } - public StreamReader(System.IO.Stream stream, System.Text.Encoding encoding) { } - public StreamReader(System.IO.Stream stream, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks) { } - public StreamReader(System.IO.Stream stream, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) { } + public StreamReader(System.IO.Stream stream, System.Text.Encoding? encoding) { } + public StreamReader(System.IO.Stream stream, System.Text.Encoding? encoding, bool detectEncodingFromByteOrderMarks) { } + public StreamReader(System.IO.Stream stream, System.Text.Encoding? encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) { } public StreamReader(System.IO.Stream stream, System.Text.Encoding? encoding = null, bool detectEncodingFromByteOrderMarks = true, int bufferSize = -1, bool leaveOpen = false) { } public StreamReader(string path) { } public StreamReader(string path, bool detectEncodingFromByteOrderMarks) { } From f19f08e3df505cbaf8747e66f2463a7bec954d39 Mon Sep 17 00:00:00 2001 From: eriawan Date: Sun, 6 Oct 2024 02:29:28 +0700 Subject: [PATCH 2/4] Set additional Encoding param to be nullable and refactor ValidateArgsAndOpenPath to not require Encoding param anymore like StreamWriter --- .../src/System/IO/StreamReader.cs | 13 ++++++------- src/libraries/System.Runtime/ref/System.Runtime.cs | 8 ++++---- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs b/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs index acdc399374725..c611fb95c3d59 100644 --- a/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs +++ b/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs @@ -187,17 +187,17 @@ public StreamReader(string path, bool detectEncodingFromByteOrderMarks) { } - public StreamReader(string path, Encoding encoding) + public StreamReader(string path, Encoding? encoding) : this(path, encoding, true, DefaultBufferSize) { } - public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks) + public StreamReader(string path, Encoding? encoding, bool detectEncodingFromByteOrderMarks) : this(path, encoding, detectEncodingFromByteOrderMarks, DefaultBufferSize) { } - public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) + public StreamReader(string path, Encoding? encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) : this(ValidateArgsAndOpenPath(path, encoding, bufferSize), encoding, detectEncodingFromByteOrderMarks, bufferSize, leaveOpen: false) { } @@ -207,15 +207,14 @@ public StreamReader(string path, FileStreamOptions options) { } - public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, FileStreamOptions options) - : this(ValidateArgsAndOpenPath(path, encoding, options), encoding, detectEncodingFromByteOrderMarks, DefaultBufferSize) + public StreamReader(string path, Encoding? encoding, bool detectEncodingFromByteOrderMarks, FileStreamOptions options) + : this(ValidateArgsAndOpenPath(path, options), encoding, detectEncodingFromByteOrderMarks, DefaultBufferSize) { } - private static FileStream ValidateArgsAndOpenPath(string path, Encoding encoding, FileStreamOptions options) + private static FileStream ValidateArgsAndOpenPath(string path, FileStreamOptions options) { ArgumentException.ThrowIfNullOrEmpty(path); - ArgumentNullException.ThrowIfNull(encoding); ArgumentNullException.ThrowIfNull(options); if ((options.Access & FileAccess.Read) == 0) { diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs index f22d22f78f347..01d8c62074983 100644 --- a/src/libraries/System.Runtime/ref/System.Runtime.cs +++ b/src/libraries/System.Runtime/ref/System.Runtime.cs @@ -10722,10 +10722,10 @@ public StreamReader(System.IO.Stream stream, System.Text.Encoding? encoding = nu public StreamReader(string path) { } public StreamReader(string path, bool detectEncodingFromByteOrderMarks) { } public StreamReader(string path, System.IO.FileStreamOptions options) { } - public StreamReader(string path, System.Text.Encoding encoding) { } - public StreamReader(string path, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks) { } - public StreamReader(string path, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) { } - public StreamReader(string path, System.Text.Encoding encoding, bool detectEncodingFromByteOrderMarks, System.IO.FileStreamOptions options) { } + public StreamReader(string path, System.Text.Encoding? encoding) { } + public StreamReader(string path, System.Text.Encoding? encoding, bool detectEncodingFromByteOrderMarks) { } + public StreamReader(string path, System.Text.Encoding? encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) { } + public StreamReader(string path, System.Text.Encoding? encoding, bool detectEncodingFromByteOrderMarks, System.IO.FileStreamOptions options) { } public virtual System.IO.Stream BaseStream { get { throw null; } } public virtual System.Text.Encoding CurrentEncoding { get { throw null; } } public bool EndOfStream { get { throw null; } } From 1358cd3a1e496a871595979c19bd04f4cabe833a Mon Sep 17 00:00:00 2001 From: eriawan Date: Sun, 6 Oct 2024 03:14:31 +0700 Subject: [PATCH 3/4] Set additional Encoding param to be nullable and refactor ValidateArgsAndOpenPath to not require Encoding param anymore like StreamWriter --- .../System.Private.CoreLib/src/System/IO/StreamReader.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs b/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs index c611fb95c3d59..cd3bc29187abd 100644 --- a/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs +++ b/src/libraries/System.Private.CoreLib/src/System/IO/StreamReader.cs @@ -198,7 +198,7 @@ public StreamReader(string path, Encoding? encoding, bool detectEncodingFromByte } public StreamReader(string path, Encoding? encoding, bool detectEncodingFromByteOrderMarks, int bufferSize) - : this(ValidateArgsAndOpenPath(path, encoding, bufferSize), encoding, detectEncodingFromByteOrderMarks, bufferSize, leaveOpen: false) + : this(ValidateArgsAndOpenPath(path, bufferSize), encoding, detectEncodingFromByteOrderMarks, bufferSize, leaveOpen: false) { } @@ -224,10 +224,9 @@ private static FileStream ValidateArgsAndOpenPath(string path, FileStreamOptions return new FileStream(path, options); } - private static FileStream ValidateArgsAndOpenPath(string path, Encoding encoding, int bufferSize) + private static FileStream ValidateArgsAndOpenPath(string path, int bufferSize) { ArgumentException.ThrowIfNullOrEmpty(path); - ArgumentNullException.ThrowIfNull(encoding); ArgumentOutOfRangeException.ThrowIfNegativeOrZero(bufferSize); return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, DefaultFileStreamBufferSize); From c74bd44ad71da184525ce7581848dd2a3f88bc43 Mon Sep 17 00:00:00 2001 From: eriawan Date: Sun, 6 Oct 2024 04:40:49 +0700 Subject: [PATCH 4/4] Refactor StreamReader_StringCtorTests accordingly as Encoding param has been set to nullable --- .../StreamReader/StreamReader.StringCtorTests.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/libraries/System.Runtime/tests/System.IO.Tests/StreamReader/StreamReader.StringCtorTests.cs b/src/libraries/System.Runtime/tests/System.IO.Tests/StreamReader/StreamReader.StringCtorTests.cs index b96ed8532d383..0e5a7af0ed194 100644 --- a/src/libraries/System.Runtime/tests/System.IO.Tests/StreamReader/StreamReader.StringCtorTests.cs +++ b/src/libraries/System.Runtime/tests/System.IO.Tests/StreamReader/StreamReader.StringCtorTests.cs @@ -19,10 +19,6 @@ public static void NullArgs_ThrowsArgumentNullException() AssertExtensions.Throws("path", () => new StreamReader((string)null, null, true)); AssertExtensions.Throws("path", () => new StreamReader((string)null, null, true, null)); AssertExtensions.Throws("path", () => new StreamReader((string)null, null, true, -1)); - AssertExtensions.Throws("encoding", () => new StreamReader("path", (Encoding)null)); - AssertExtensions.Throws("encoding", () => new StreamReader("path", null, true)); - AssertExtensions.Throws("encoding", () => new StreamReader("path", null, true, null)); - AssertExtensions.Throws("encoding", () => new StreamReader("path", null, true, -1)); AssertExtensions.Throws("options", () => new StreamReader("path", (FileStreamOptions)null)); AssertExtensions.Throws("options", () => new StreamReader("path", Encoding.UTF8, true, null));