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

CA1307: Only consider equal or more accessible overloads #6998

Merged
merged 8 commits into from
Dec 1, 2023
Next Next commit
Only include equal or more accessible methods
  • Loading branch information
david-acker committed Oct 21, 2023
commit 4c861cf7b98ac43a386f482a2cf1384776e65a5f
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,10 @@ protected override void InitializeWorker(CompilationStartAnalysisContext context
// plus as additional StringComparison parameter. Default StringComparison may or may not match user's intent,
// but it is recommended to explicitly specify it for clarity and readability:
// https://learn.microsoft.com/dotnet/standard/base-types/best-practices-strings#recommendations-for-string-usage
IEnumerable<IMethodSymbol> methodsWithSameNameAsTargetMethod = targetMethod.ContainingType.GetMembers(targetMethod.Name).OfType<IMethodSymbol>();
IEnumerable<IMethodSymbol> methodsWithSameNameAsTargetMethod = targetMethod.ContainingType
.GetMembers(targetMethod.Name).OfType<IMethodSymbol>()
.Where(method => method.DeclaredAccessibility >= targetMethod.DeclaredAccessibility);

if (methodsWithSameNameAsTargetMethod.HasMoreThan(1))
{
var correctOverload = methodsWithSameNameAsTargetMethod
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,44 @@ private void F(Expression<Func<C, bool>> e) {}
}");
}

[Fact, WorkItem(6943, "https://github.com/dotnet/roslyn-analyzers/issues/6943")]
public async Task CA1307_OverloadRespectsAccessibility_NoDiagnosticAsync()
{
await VerifyCS.VerifyAnalyzerAsync(@"
using System;

public class G
{
public static void DoSomething()
{
F.M("""");
}
}

public class F
{
private static void M(string s, StringComparison c) { }
public static void M(string s) { }
}");

await VerifyVB.VerifyAnalyzerAsync(@"
Imports System

Public Class G
Public Shared Sub DoSomething()
F.M("""")
End Sub
End Class

Public Class F
Private Shared Sub M(s As String, c As StringComparison)
End Sub

Public Shared Sub M(s As String)
End Sub
End Class");
}

private static DiagnosticResult GetCA1307CSharpResultsAt(int line, int column, string arg1, string arg2, string arg3) =>
#pragma warning disable RS0030 // Do not use banned APIs
VerifyCS.Diagnostic(SpecifyStringComparisonAnalyzer.Rule_CA1307)
Expand Down