未验证 提交 2a740c35 编写于 作者: J Jared Parsons 提交者: GitHub

Merge pull request #40484 from jaredpar/nullable2.1

Remove null from Diagnostic.Arguments
......@@ -21,6 +21,18 @@
],
"problemMatcher": "$msCompile",
"group": "build"
},
{
"label": "build csc skip analyzers",
"command": "dotnet",
"type": "shell",
"args": [
"msbuild",
"src/Compilers/CSharp/csc/csc.csproj",
"-p:UseRoslynAnalyzers=false"
],
"problemMatcher": "$msCompile",
"group": "build"
}
]
}
......@@ -43,7 +43,7 @@ public override string Id
public override string GetMessage(IFormatProvider? formatProvider = null)
=> _originalUnsuppressedDiagnostic.GetMessage(formatProvider);
internal override IReadOnlyList<object?>? Arguments
internal override IReadOnlyList<object?> Arguments
{
get { return _originalUnsuppressedDiagnostic.Arguments; }
}
......
......@@ -466,7 +466,7 @@ internal Diagnostic WithProgrammaticSuppression(ProgrammaticSuppressionInfo prog
// compatibility
internal virtual int Code { get { return 0; } }
internal virtual IReadOnlyList<object?>? Arguments
internal virtual IReadOnlyList<object?> Arguments
{
get { return SpecializedCollections.EmptyReadOnlyList<object?>(); }
}
......
......@@ -28,7 +28,7 @@ internal class DiagnosticInfo : IFormattable, IObjectWritable
private readonly int _errorCode;
private readonly DiagnosticSeverity _defaultSeverity;
private readonly DiagnosticSeverity _effectiveSeverity;
private readonly object[]? _arguments;
private readonly object[] _arguments;
private static ImmutableDictionary<int, DiagnosticDescriptor> s_errorCodeToDescriptorMap = ImmutableDictionary<int, DiagnosticDescriptor>.Empty;
......@@ -48,6 +48,7 @@ internal DiagnosticInfo(CommonMessageProvider messageProvider, int errorCode)
_errorCode = errorCode;
_defaultSeverity = messageProvider.GetSeverity(errorCode);
_effectiveSeverity = _defaultSeverity;
_arguments = Array.Empty<object>();
}
// Only the compiler creates instances.
......@@ -155,12 +156,12 @@ protected virtual void WriteTo(ObjectWriter writer)
writer.WriteInt32((int)_effectiveSeverity);
writer.WriteInt32((int)_defaultSeverity);
int count = _arguments?.Length ?? 0;
int count = _arguments.Length;
writer.WriteUInt32((uint)count);
if (count > 0)
{
foreach (var arg in _arguments!)
foreach (var arg in _arguments)
{
writer.WriteString(arg.ToString());
}
......@@ -175,11 +176,7 @@ protected DiagnosticInfo(ObjectReader reader)
_defaultSeverity = (DiagnosticSeverity)reader.ReadInt32();
var count = (int)reader.ReadUInt32();
if (count == 0)
{
_arguments = Array.Empty<object>();
}
else if (count > 0)
if (count > 0)
{
_arguments = new string[count];
for (int i = 0; i < count; i++)
......@@ -187,6 +184,10 @@ protected DiagnosticInfo(ObjectReader reader)
_arguments[i] = reader.ReadString();
}
}
else
{
_arguments = Array.Empty<object>();
}
}
#endregion
......@@ -331,7 +332,7 @@ public virtual string GetMessage(IFormatProvider? formatProvider = null)
return string.Empty;
}
if (_arguments == null || _arguments.Length == 0)
if (_arguments.Length == 0)
{
return message;
}
......@@ -341,7 +342,6 @@ public virtual string GetMessage(IFormatProvider? formatProvider = null)
protected object[] GetArgumentsToUse(IFormatProvider? formatProvider)
{
RoslynDebug.Assert(_arguments is object);
object[]? argumentsToUse = null;
for (int i = 0; i < _arguments.Length; i++)
{
......@@ -371,14 +371,13 @@ private object[] InitializeArgumentListIfNeeded(object[]? argumentsToUse)
return argumentsToUse;
}
RoslynDebug.Assert(_arguments != null);
var newArguments = new object[_arguments.Length];
Array.Copy(_arguments, newArguments, newArguments.Length);
return newArguments;
}
internal object[]? Arguments
internal object[] Arguments
{
get { return _arguments; }
}
......@@ -409,12 +408,9 @@ string IFormattable.ToString(string format, IFormatProvider? formatProvider)
public sealed override int GetHashCode()
{
int hashCode = _errorCode;
if (_arguments != null)
for (int i = 0; i < _arguments.Length; i++)
{
for (int i = 0; i < _arguments.Length; i++)
{
hashCode = Hash.Combine(_arguments[i], hashCode);
}
hashCode = Hash.Combine(_arguments[i], hashCode);
}
return hashCode;
......@@ -430,11 +426,7 @@ public sealed override bool Equals(object? obj)
other._errorCode == _errorCode &&
other.GetType() == this.GetType())
{
if (_arguments == null && other._arguments == null)
{
result = true;
}
else if (_arguments != null && other._arguments != null && _arguments.Length == other._arguments.Length)
if (_arguments.Length == other._arguments.Length)
{
result = true;
for (int i = 0; i < _arguments.Length; i++)
......
......@@ -102,7 +102,7 @@ public override string GetMessage(IFormatProvider? formatProvider = null)
return this.Info.GetMessage(formatProvider);
}
internal override IReadOnlyList<object>? Arguments
internal override IReadOnlyList<object> Arguments
{
get { return this.Info.Arguments; }
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册