提交 9adebb61 编写于 作者: C Cyrus Najmabadi

Do not show unspeakable names in override completion

上级 542be342
......@@ -4,6 +4,7 @@
using System;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;
......@@ -3044,6 +3045,7 @@ public override bool Bar(Baz baz)
}
[WpfFact, Trait(Traits.Feature, Traits.Features.Completion)]
[WorkItem(47941, "https://github.com/dotnet/roslyn/issues/47941")]
public async Task OverrideInRecordWithoutExplicitOverriddenMember()
{
await VerifyItemExistsAsync(@"record Program
......@@ -3053,6 +3055,7 @@ public async Task OverrideInRecordWithoutExplicitOverriddenMember()
}
[WpfFact, Trait(Traits.Feature, Traits.Features.Completion)]
[WorkItem(47941, "https://github.com/dotnet/roslyn/issues/47941")]
public async Task OverrideInRecordWithExplicitOverriddenMember()
{
await VerifyItemIsAbsentAsync(@"record Program
......@@ -3062,5 +3065,20 @@ public async Task OverrideInRecordWithExplicitOverriddenMember()
override $$
}", "ToString()");
}
[WpfFact, Trait(Traits.Feature, Traits.Features.Completion)]
[WorkItem(47973, "https://github.com/dotnet/roslyn/issues/47973")]
public async Task NoCloneInOverriddenRecord()
{
var cloneMemberName = (string)typeof(WellKnownMemberNames).GetField("CloneMethodName", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
Assert.Equal("<Clone>$", cloneMemberName);
await VerifyItemIsAbsentAsync(@"
record Base();
record Program : Base
{
override $$
}", cloneMemberName);
}
}
}
......@@ -551,30 +551,25 @@ private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol
private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
{
if (member.IsAbstract || member.IsVirtual || member.IsOverride)
{
if (member.IsSealed)
{
return false;
}
if (!member.IsAbstract && !member.IsVirtual && !member.IsOverride)
return false;
if (!member.IsAccessibleWithin(containingType))
{
return false;
}
if (member.IsSealed)
return false;
switch (member.Kind)
{
case SymbolKind.Event:
return true;
case SymbolKind.Method:
return ((IMethodSymbol)member).MethodKind == MethodKind.Ordinary;
case SymbolKind.Property:
return !((IPropertySymbol)member).IsWithEvents;
}
}
if (!member.CanBeReferencedByName)
return false;
return false;
if (!member.IsAccessibleWithin(containingType))
return false;
return member switch
{
IEventSymbol _ => true,
IMethodSymbol method when method.MethodKind == MethodKind.Ordinary => true,
IPropertySymbol property when !property.IsWithEvents => true,
_ => false,
};
}
private static void RemoveOverriddenMembers(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册