Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Override all write/flush methods on NullTextWriter #83293

Merged
merged 2 commits into from
Mar 13, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
85 changes: 56 additions & 29 deletions src/libraries/System.Private.CoreLib/src/System/IO/TextWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -656,39 +656,66 @@ public virtual Task FlushAsync()

private sealed class NullTextWriter : TextWriter
{
internal NullTextWriter()
{
}
internal NullTextWriter() { }

public override IFormatProvider FormatProvider => CultureInfo.InvariantCulture;

public override Encoding Encoding => Encoding.Unicode;

public override void Write(char[] buffer, int index, int count)
{
}

public override void Write(string? value)
{
}

// Not strictly necessary, but for perf reasons
public override void WriteLine()
{
}

// Not strictly necessary, but for perf reasons
public override void WriteLine(string? value)
{
}

public override void WriteLine(object? value)
{
}

public override void Write(char value)
{
}
// To avoid all unnecessary overhead in the base, override all Flush/Write methods as pure nops.

public override void Flush() { }
public override Task FlushAsync() => Task.CompletedTask;

public override void Write(char value) { }
public override void Write(char[]? buffer) { }
public override void Write(char[] buffer, int index, int count) { }
public override void Write(ReadOnlySpan<char> buffer) { }
public override void Write(bool value) { }
public override void Write(int value) { }
public override void Write(uint value) { }
public override void Write(long value) { }
public override void Write(ulong value) { }
public override void Write(float value) { }
public override void Write(double value) { }
public override void Write(decimal value) { }
public override void Write(string? value) { }
public override void Write(object? value) { }
public override void Write(StringBuilder? value) { }
public override void Write([StringSyntax(StringSyntaxAttribute.CompositeFormat)] string format, object? arg0) { }
public override void Write([StringSyntax(StringSyntaxAttribute.CompositeFormat)] string format, object? arg0, object? arg1) { }
public override void Write([StringSyntax(StringSyntaxAttribute.CompositeFormat)] string format, object? arg0, object? arg1, object? arg2) { }
public override void Write([StringSyntax(StringSyntaxAttribute.CompositeFormat)] string format, params object?[] arg) { }
public override Task WriteAsync(char value) => Task.CompletedTask;
public override Task WriteAsync(string? value) => Task.CompletedTask;
public override Task WriteAsync(StringBuilder? value, CancellationToken cancellationToken = default) => Task.CompletedTask;
public override Task WriteAsync(char[] buffer, int index, int count) => Task.CompletedTask;
public override Task WriteAsync(ReadOnlyMemory<char> buffer, CancellationToken cancellationToken = default) => Task.CompletedTask;
public override void WriteLine() { }
public override void WriteLine(char value) { }
public override void WriteLine(char[]? buffer) { }
public override void WriteLine(char[] buffer, int index, int count) { }
public override void WriteLine(ReadOnlySpan<char> buffer) { }
public override void WriteLine(bool value) { }
public override void WriteLine(int value) { }
public override void WriteLine(uint value) { }
public override void WriteLine(long value) { }
public override void WriteLine(ulong value) { }
public override void WriteLine(float value) { }
public override void WriteLine(double value) { }
public override void WriteLine(decimal value) { }
public override void WriteLine(string? value) { }
public override void WriteLine(StringBuilder? value) { }
public override void WriteLine(object? value) { }
public override void WriteLine([StringSyntax(StringSyntaxAttribute.CompositeFormat)] string format, object? arg0) { }
public override void WriteLine([StringSyntax(StringSyntaxAttribute.CompositeFormat)] string format, object? arg0, object? arg1) { }
public override void WriteLine([StringSyntax(StringSyntaxAttribute.CompositeFormat)] string format, object? arg0, object? arg1, object? arg2) { }
public override void WriteLine([StringSyntax(StringSyntaxAttribute.CompositeFormat)] string format, params object?[] arg) { }
public override Task WriteLineAsync(char value) => Task.CompletedTask;
public override Task WriteLineAsync(string? value) => Task.CompletedTask;
public override Task WriteLineAsync(StringBuilder? value, CancellationToken cancellationToken = default) => Task.CompletedTask;
public override Task WriteLineAsync(char[] buffer, int index, int count) => Task.CompletedTask;
public override Task WriteLineAsync(ReadOnlyMemory<char> buffer, CancellationToken cancellationToken = default) => Task.CompletedTask;
public override Task WriteLineAsync() => Task.CompletedTask;
}

public static TextWriter Synchronized(TextWriter writer)
Expand Down