提交 5feb22ec 编写于 作者: A Allison Chou

Covered more cases and added a test

上级 588ba577
......@@ -840,6 +840,25 @@ void Method2(Func<object> LocalFunction)
CodeStyleOptions.QualifyMethodAccess);
}
[WorkItem(38043, "https://github.com/dotnet/roslyn/issues/38043")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsQualifyMemberAccess)]
public async Task QualifyLocalMethodAccess_NotSuggestedInCollectionInitializer()
{
await TestMissingAsyncWithOption(
@"using System;
using System.Collections.Generic;
class C
{
void Method()
{
object LocalFunction() => new object();
var dict = new Dictionary<Func<object>, int>() { { [|LocalFunction|], 1 } };
}
}",
CodeStyleOptions.QualifyMethodAccess);
}
[WorkItem(7065, "https://github.com/dotnet/roslyn/issues/7065")]
[Fact(Skip = "https://github.com/dotnet/roslyn/issues/7587"), Trait(Traits.Feature, Traits.Features.CodeActionsQualifyMemberAccess)]
public async Task QualifyEventAccess_EventSubscription()
......
......@@ -108,7 +108,7 @@ private void AnalyzeOperation(OperationAnalysisContext context, IOperation opera
// if we can't find a member then we can't do anything. Also, we shouldn't qualify
// accesses to static members.
if (IsStaticMemberOrTargetMethod(operation))
if (IsMemberOrTargetMethodStaticOrLocalFunction(operation))
{
return;
}
......@@ -147,15 +147,16 @@ private void AnalyzeOperation(OperationAnalysisContext context, IOperation opera
}
}
private bool IsStaticMemberOrTargetMethod(IOperation operation)
private bool IsMemberOrTargetMethodStaticOrLocalFunction(IOperation operation)
{
switch (operation)
{
case IMemberReferenceOperation memberReferenceOperation:
return memberReferenceOperation.Member == null || memberReferenceOperation.Member.IsStatic ||
memberReferenceOperation.Member is IMethodSymbol method && method.MethodKind == MethodKind.LocalFunction;
memberReferenceOperation.Member is IMethodSymbol memberMethod && memberMethod.MethodKind == MethodKind.LocalFunction;
case IInvocationOperation invocationOperation:
return invocationOperation.TargetMethod == null || invocationOperation.TargetMethod.IsStatic;
return invocationOperation.TargetMethod == null || invocationOperation.TargetMethod.IsStatic ||
invocationOperation.TargetMethod is IMethodSymbol targetMethod && targetMethod.MethodKind == MethodKind.LocalFunction;
default:
throw ExceptionUtilities.UnexpectedValue(operation);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册