diff --git a/tests/Opc.Ua.MigrationAnalyzer.Tests/Analyzers/UA0003Tests.cs b/tests/Opc.Ua.MigrationAnalyzer.Tests/Analyzers/UA0003Tests.cs index 7026ea9553..bddae7dfc0 100644 --- a/tests/Opc.Ua.MigrationAnalyzer.Tests/Analyzers/UA0003Tests.cs +++ b/tests/Opc.Ua.MigrationAnalyzer.Tests/Analyzers/UA0003Tests.cs @@ -123,6 +123,42 @@ class C Assert.That(diags.Any(d => d.Id == "UA0003"), Is.False); } + [Test] + public async Task DoesNotReportOnNullableNodeIdEqualsNullAsync() + { + const string source = """ + using Opc.Ua; + class C + { + static bool M(NodeId? n) => n == null; + } + """; + + ImmutableArray diags = await AnalyzerHarness + .GetAnalyzerDiagnosticsAsync(new UA0003NullCheckOnStructTypeAnalyzer(), source) + .ConfigureAwait(false); + + Assert.That(diags.Any(d => d.Id == "UA0003"), Is.False); + } + + [Test] + public async Task DoesNotReportOnNullableLocalizedTextNotEqualsNullAsync() + { + const string source = """ + using Opc.Ua; + class C + { + static bool M(LocalizedText? value) => null != value; + } + """; + + ImmutableArray diags = await AnalyzerHarness + .GetAnalyzerDiagnosticsAsync(new UA0003NullCheckOnStructTypeAnalyzer(), source) + .ConfigureAwait(false); + + Assert.That(diags.Any(d => d.Id == "UA0003"), Is.False); + } + [Test] public async Task DoesNotReportOnEqualsMethodCallAsync() { diff --git a/tools/Opc.Ua.MigrationAnalyzer/Analyzers/UA0003NullCheckOnStructTypeAnalyzer.cs b/tools/Opc.Ua.MigrationAnalyzer/Analyzers/UA0003NullCheckOnStructTypeAnalyzer.cs index 6d151f0a67..6193449fbe 100644 --- a/tools/Opc.Ua.MigrationAnalyzer/Analyzers/UA0003NullCheckOnStructTypeAnalyzer.cs +++ b/tools/Opc.Ua.MigrationAnalyzer/Analyzers/UA0003NullCheckOnStructTypeAnalyzer.cs @@ -85,11 +85,10 @@ private static void AnalyzeBinary(OperationAnalysisContext context, UaSymbols sy { return; } - if (valueType.OriginalDefinition?.SpecialType == SpecialType.System_Nullable_T && - valueType is INamedTypeSymbol named && - named.TypeArguments.Length == 1) + if (valueType is INamedTypeSymbol namedType && + namedType.OriginalDefinition.SpecialType == SpecialType.System_Nullable_T) { - valueType = named.TypeArguments[0]; + return; } if (!symbols.IsBuiltInStructType(valueType))