Skip to content

Commit 2b43156

Browse files
committed
Fix NRE in BasicOverrideEqualsOnOverloadingOperatorEqualsAnalyzer
Fixes #6778
1 parent 20690b4 commit 2b43156

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

src/NetAnalyzers/UnitTests/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/OverrideEqualsOnOverloadingOperatorEqualsTests.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information.
1+
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information.
22

33
using System.Threading.Tasks;
44
using Microsoft.CodeAnalysis.Testing;
5+
using Test.Utilities;
56
using Xunit;
67
using VerifyVB = Test.Utilities.VisualBasicCodeFixVerifier<
78
Microsoft.CodeQuality.VisualBasic.Analyzers.ApiDesignGuidelines.BasicOverrideEqualsOnOverloadingOperatorEqualsAnalyzer,
@@ -167,6 +168,25 @@ End Function
167168
GetBasicResultAt(8, 7));
168169
}
169170

171+
[Fact, WorkItem(6778, "https://github.com/dotnet/roslyn-analyzers/issues/6778")]
172+
public async Task Bad_Structure_WithNonMethodMember_Async()
173+
{
174+
await VerifyVB.VerifyAnalyzerAsync(@"
175+
Structure C
176+
Public Field As Integer
177+
178+
Public Shared Operator =(a As C, b As C)
179+
Return True
180+
End Operator
181+
182+
Public Shared Operator <>(a As C, b As C)
183+
Return True
184+
End Operator
185+
End Structure",
186+
// Test0.vb(2,11): warning CA2224: Override Equals on overloading operator equals
187+
GetBasicResultAt(2, 11));
188+
}
189+
170190
private static DiagnosticResult GetBasicResultAt(int line, int column)
171191
#pragma warning disable RS0030 // Do not use banned APIs
172192
=> VerifyVB.Diagnostic()

src/NetAnalyzers/VisualBasic/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/BasicOverrideEqualsOnOverloadingOperatorEquals.vb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ Namespace Microsoft.CodeQuality.VisualBasic.Analyzers.ApiDesignGuidelines
6363
Private Shared Function HasEqualityOperator(type As INamedTypeSymbol) As Boolean
6464
For Each member In type.GetMembers()
6565
Dim method = TryCast(member, IMethodSymbol)
66-
If method?.MethodKind = MethodKind.UserDefinedOperator AndAlso
67-
CaseInsensitiveComparison.Equals(method.Name, WellKnownMemberNames.EqualityOperatorName) Then
66+
If method IsNot Nothing AndAlso
67+
method.MethodKind = MethodKind.UserDefinedOperator AndAlso
68+
CaseInsensitiveComparison.Equals(method.Name, WellKnownMemberNames.EqualityOperatorName) Then
6869

6970
Return True
7071
End If

0 commit comments

Comments
 (0)