Skip to content

Commit e83a272

Browse files
author
Mike McLaughlin
authored
Fix/disable nullable warnings treated as errors with newer SDKs installed (#3616)
* Fix/disable nullable warnings treated as errors with newer SDKs installed * Missed a test cs file
1 parent 1671b50 commit e83a272

15 files changed

Lines changed: 109 additions & 47 deletions

File tree

src/Microsoft.Diagnostics.ExtensionCommands/DumpAsyncCommand.cs

Lines changed: 54 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ bool ShouldIncludeStack(AsyncObject obj)
459459
// <summary>Outputs a line of information for each instance field on the object.</summary>
460460
void RenderFields(IAddressableTypedEntity? obj, int depth)
461461
{
462-
if (obj is not null)
462+
if (obj?.Type is not null)
463463
{
464464
string depthTab = new string(' ', depth * TabWidth);
465465

@@ -489,33 +489,36 @@ void RenderFields(IAddressableTypedEntity? obj, int depth)
489489
// <summary>Gets a printable description for the specified object.</summary>
490490
string Describe(ClrObject obj)
491491
{
492-
// Default the description to the type name.
493-
string description = obj.Type.Name;
494-
495-
if (IsStateMachineBox(obj.Type))
492+
string description = string.Empty;
493+
if (obj.Type?.Name is not null)
496494
{
497-
// Remove the boilerplate box type from the name.
498-
int pos = description.IndexOf("StateMachineBox<", StringComparison.Ordinal);
499-
if (pos >= 0)
495+
// Default the description to the type name.
496+
description = obj.Type.Name;
497+
498+
if (IsStateMachineBox(obj.Type))
500499
{
501-
ReadOnlySpan<char> slice = description.AsSpan(pos + "StateMachineBox<".Length);
502-
slice = slice.Slice(0, slice.Length - 1); // remove trailing >
503-
description = slice.ToString();
500+
// Remove the boilerplate box type from the name.
501+
int pos = description.IndexOf("StateMachineBox<", StringComparison.Ordinal);
502+
if (pos >= 0)
503+
{
504+
ReadOnlySpan<char> slice = description.AsSpan(pos + "StateMachineBox<".Length);
505+
slice = slice.Slice(0, slice.Length - 1); // remove trailing >
506+
description = slice.ToString();
507+
}
504508
}
505-
}
506-
else if (TryGetValidObjectField(obj, "m_action", out ClrObject taskDelegate))
507-
{
508-
// If we can figure out what the task's delegate points to, append the method signature.
509-
if (TryGetMethodFromDelegate(runtime, taskDelegate, out ClrMethod? method))
509+
else if (TryGetValidObjectField(obj, "m_action", out ClrObject taskDelegate))
510+
{
511+
// If we can figure out what the task's delegate points to, append the method signature.
512+
if (TryGetMethodFromDelegate(runtime, taskDelegate, out ClrMethod? method))
513+
{
514+
description = $"{description} {{{method!.Signature}}}";
515+
}
516+
}
517+
else if (obj.Address != 0 && taskCompletionSentinel.Address == obj.Address)
510518
{
511-
description = $"{description} {{{method!.Signature}}}";
519+
description = "TaskCompletionSentinel";
512520
}
513521
}
514-
else if (obj.Address != 0 && taskCompletionSentinel.Address == obj.Address)
515-
{
516-
description = "TaskCompletionSentinel";
517-
}
518-
519522
return description;
520523
}
521524

@@ -527,14 +530,17 @@ bool IncludeInOutput(ClrObject obj)
527530
return false;
528531
}
529532

530-
if (MethodTableAddress is ulong mt && obj.Type.MethodTable != mt)
533+
if (obj.Type is not null)
531534
{
532-
return false;
533-
}
535+
if (MethodTableAddress is ulong mt && obj.Type.MethodTable != mt)
536+
{
537+
return false;
538+
}
534539

535-
if (NameSubstring is not null && !obj.Type.Name.Contains(NameSubstring))
536-
{
537-
return false;
540+
if (NameSubstring is not null && obj.Type.Name is not null && !obj.Type.Name.Contains(NameSubstring))
541+
{
542+
return false;
543+
}
538544
}
539545

540546
return true;
@@ -655,37 +661,42 @@ Dictionary<ClrObject, AsyncObject> CollectObjects()
655661
// </remarks>
656662
void AddContinuation(ClrObject continuation, List<ClrObject> continuations)
657663
{
658-
if (continuation.Type.Name.StartsWith("System.Collections.Generic.List<", StringComparison.Ordinal))
664+
if (continuation.Type is not null)
659665
{
660-
if (continuation.Type.GetFieldByName("_items") is ClrInstanceField itemsField)
666+
if (continuation.Type.Name is not null &&
667+
continuation.Type.Name.StartsWith("System.Collections.Generic.List<", StringComparison.Ordinal))
661668
{
662-
ClrObject itemsObj = itemsField.ReadObject(continuation.Address, interior: false);
663-
if (!itemsObj.IsNull)
669+
if (continuation.Type.GetFieldByName("_items") is ClrInstanceField itemsField)
664670
{
665-
ClrArray items = itemsObj.AsArray();
666-
if (items.Rank == 1)
671+
ClrObject itemsObj = itemsField.ReadObject(continuation.Address, interior: false);
672+
if (!itemsObj.IsNull)
667673
{
668-
for (int i = 0; i < items.Length; i++)
674+
ClrArray items = itemsObj.AsArray();
675+
if (items.Rank == 1)
669676
{
670-
if (items.GetObjectValue(i) is ClrObject { IsValid: true } c)
677+
for (int i = 0; i < items.Length; i++)
671678
{
672-
continuations.Add(ResolveContinuation(c));
679+
if (items.GetObjectValue(i) is ClrObject { IsValid: true } c)
680+
{
681+
continuations.Add(ResolveContinuation(c));
682+
}
673683
}
674684
}
675685
}
676686
}
677687
}
678-
}
679-
else
680-
{
681-
continuations.Add(continuation);
688+
else
689+
{
690+
continuations.Add(continuation);
691+
}
682692
}
683693
}
684694

685695
// <summary>Tries to get the object contents of a Task's continuations field</summary>
686696
bool TryGetContinuation(ClrObject obj, out ClrObject continuation)
687697
{
688-
if (obj.Type.GetFieldByName("m_continuationObject") is ClrInstanceField continuationObjectField &&
698+
if (obj.Type is not null &&
699+
obj.Type.GetFieldByName("m_continuationObject") is ClrInstanceField continuationObjectField &&
689700
continuationObjectField.ReadObject(obj.Address, interior: false) is ClrObject { IsValid: true } continuationObject)
690701
{
691702
continuation = ResolveContinuation(continuationObject);
@@ -888,7 +899,7 @@ private void WriteCodeLink(ulong address)
888899
}
889900

890901
/// <summary>Gets whether the specified type is an AsyncStateMachineBox{T}.</summary>
891-
private static bool IsStateMachineBox(ClrType type)
902+
private static bool IsStateMachineBox(ClrType? type)
892903
{
893904
// Ideally we would compare the metadata token and module for the generic template for the type,
894905
// but that information isn't fully available via ClrMd, nor can it currently find DebugFinalizableAsyncStateMachineBox

src/SOS/SOS.UnitTests/SOS.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
using Xunit.Abstractions;
1515
using Xunit.Extensions;
1616

17+
// Newer SDKs flag MemberData(nameof(Configurations)) with this error
18+
// Avoid unnecessary zero-length array allocations. Use Array.Empty<object>() instead.
19+
#pragma warning disable CA1825
20+
21+
[Collection("Windows Dump Generation")]
1722
public class SOS
1823
{
1924
public SOS(ITestOutputHelper output)

src/tests/DbgShim.UnitTests/DbgShimTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
using Xunit.Abstractions;
2121
using Xunit.Extensions;
2222

23+
// Newer SDKs flag MemberData(nameof(Configurations)) with this error
24+
// Avoid unnecessary zero-length array allocations. Use Array.Empty<object>() instead.
25+
#pragma warning disable CA1825
26+
2327
namespace Microsoft.Diagnostics
2428
{
2529
public class DbgShimTests : IDisposable

src/tests/Microsoft.Diagnostics.DebugServices.UnitTests/DebugServicesTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
using Xunit.Abstractions;
1212
using Xunit.Extensions;
1313

14+
// Newer SDKs flag MemberData(nameof(Configurations)) with this error
15+
// Avoid unnecessary zero-length array allocations. Use Array.Empty<object>() instead.
16+
#pragma warning disable CA1825
17+
1418
namespace Microsoft.Diagnostics.DebugServices.UnitTests
1519
{
1620
public class DebugServicesTests : IDisposable

src/tests/Microsoft.Diagnostics.Monitoring.EventPipe/EventCounterPipelineUnitTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
using Xunit.Extensions;
1414
using TestRunner = Microsoft.Diagnostics.CommonTestRunner.TestRunner;
1515

16+
// Newer SDKs flag MemberData(nameof(Configurations)) with this error
17+
// Avoid unnecessary zero-length array allocations. Use Array.Empty<object>() instead.
18+
#pragma warning disable CA1825
19+
1620
namespace Microsoft.Diagnostics.Monitoring.EventPipe.UnitTests
1721
{
1822
public class EventCounterPipelineUnitTests

src/tests/Microsoft.Diagnostics.Monitoring.EventPipe/EventCounterTriggerTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@
1010
using System.Collections.Generic;
1111
using System.ComponentModel.DataAnnotations;
1212
using System.Globalization;
13-
using System.Runtime.InteropServices;
1413
using System.Threading;
1514
using System.Threading.Tasks;
1615
using Xunit;
1716
using Xunit.Abstractions;
1817
using Xunit.Extensions;
1918
using TestRunner = Microsoft.Diagnostics.CommonTestRunner.TestRunner;
2019

20+
// Newer SDKs flag MemberData(nameof(Configurations)) with this error
21+
// Avoid unnecessary zero-length array allocations. Use Array.Empty<object>() instead.
22+
#pragma warning disable CA1825
23+
2124
namespace Microsoft.Diagnostics.Monitoring.EventPipe.UnitTests
2225
{
2326
public class EventCounterTriggerTests

src/tests/Microsoft.Diagnostics.Monitoring.EventPipe/EventLogsPipelineUnitTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
using Xunit.Extensions;
1919
using TestRunner = Microsoft.Diagnostics.CommonTestRunner.TestRunner;
2020

21+
// Newer SDKs flag MemberData(nameof(Configurations)) with this error
22+
// Avoid unnecessary zero-length array allocations. Use Array.Empty<object>() instead.
23+
#pragma warning disable CA1825
24+
2125
namespace Microsoft.Diagnostics.Monitoring.EventPipe.UnitTests
2226
{
2327
public class EventLogsPipelineUnitTests

src/tests/Microsoft.Diagnostics.Monitoring.EventPipe/EventTracePipelineUnitTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
using Xunit.Extensions;
1818
using TestRunner = Microsoft.Diagnostics.CommonTestRunner.TestRunner;
1919

20+
// Newer SDKs flag MemberData(nameof(Configurations)) with this error
21+
// Avoid unnecessary zero-length array allocations. Use Array.Empty<object>() instead.
22+
#pragma warning disable CA1825
23+
2024
namespace Microsoft.Diagnostics.Monitoring.EventPipe.UnitTests
2125
{
2226
public class EventTracePipelineUnitTests

src/tests/Microsoft.Diagnostics.NETCore.Client/EventPipeSessionTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
using Xunit.Extensions;
1515
using TestRunner = Microsoft.Diagnostics.CommonTestRunner.TestRunner;
1616

17+
// Newer SDKs flag MemberData(nameof(Configurations)) with this error
18+
// Avoid unnecessary zero-length array allocations. Use Array.Empty<object>() instead.
19+
#pragma warning disable CA1825
20+
1721
namespace Microsoft.Diagnostics.NETCore.Client
1822
{
1923
public class EventPipeSessionTests

src/tests/Microsoft.Diagnostics.NETCore.Client/GetProcessEnvironmentTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
using Xunit.Extensions;
1111
using TestRunner = Microsoft.Diagnostics.CommonTestRunner.TestRunner;
1212

13+
// Newer SDKs flag MemberData(nameof(Configurations)) with this error
14+
// Avoid unnecessary zero-length array allocations. Use Array.Empty<object>() instead.
15+
#pragma warning disable CA1825
16+
1317
namespace Microsoft.Diagnostics.NETCore.Client
1418
{
1519
public class ProcessEnvironmentTests

0 commit comments

Comments
 (0)