提交 1c933e04 编写于 作者: C Cyrus Najmabadi

Simplify type checks.

上级 9062814b
......@@ -2495,13 +2495,7 @@ public override SyntaxNode InsertAccessors(SyntaxNode declaration, int index, IE
}
internal static AccessorListSyntax GetAccessorList(SyntaxNode declaration)
=> declaration switch
{
PropertyDeclarationSyntax property => property.AccessorList,
IndexerDeclarationSyntax indexer => indexer.AccessorList,
EventDeclarationSyntax @event => @event.AccessorList,
_ => null,
};
=> (declaration as BasePropertyDeclarationSyntax)?.AccessorList;
private static bool CanHaveAccessors(SyntaxNode declaration)
=> declaration.Kind() switch
......@@ -2513,11 +2507,9 @@ private static bool CanHaveAccessors(SyntaxNode declaration)
};
private static SyntaxNode WithAccessorList(SyntaxNode declaration, AccessorListSyntax accessorList)
=> declaration.Kind() switch
=> declaration switch
{
SyntaxKind.PropertyDeclaration => ((PropertyDeclarationSyntax)declaration).WithAccessorList(accessorList),
SyntaxKind.IndexerDeclaration => ((PropertyDeclarationSyntax)declaration).WithAccessorList(accessorList),
SyntaxKind.EventDeclaration => ((EventDeclarationSyntax)declaration).WithAccessorList(accessorList),
BasePropertyDeclarationSyntax baseProperty => baseProperty.WithAccessorList(accessorList),
_ => declaration,
};
......
......@@ -22,6 +22,7 @@ namespace Microsoft.CodeAnalysis.CSharp.SemanticModelReuse
internal class CSharpSemanticModelReuseLanguageService : AbstractSemanticModelReuseLanguageService<
MemberDeclarationSyntax,
BaseMethodDeclarationSyntax,
BasePropertyDeclarationSyntax,
AccessorDeclarationSyntax>
{
[ImportingConstructor]
......@@ -32,15 +33,15 @@ public CSharpSemanticModelReuseLanguageService()
protected override ISyntaxFacts SyntaxFacts => CSharpSyntaxFacts.Instance;
protected override MemberDeclarationSyntax GetAccessorContainerDeclaration(AccessorDeclarationSyntax currentAccessor)
protected override BasePropertyDeclarationSyntax GetBasePropertyDeclaration(AccessorDeclarationSyntax accessor)
{
Contract.ThrowIfFalse(currentAccessor.Parent is AccessorListSyntax);
Contract.ThrowIfFalse(currentAccessor.Parent.Parent is MemberDeclarationSyntax);
return (MemberDeclarationSyntax)currentAccessor.Parent.Parent;
Contract.ThrowIfFalse(accessor.Parent is AccessorListSyntax);
Contract.ThrowIfFalse(accessor.Parent.Parent is BasePropertyDeclarationSyntax);
return (BasePropertyDeclarationSyntax)accessor.Parent.Parent;
}
protected override SyntaxList<AccessorDeclarationSyntax> GetAccessors(MemberDeclarationSyntax member)
=> CSharpSyntaxGenerator.GetAccessorList(member).Accessors;
protected override SyntaxList<AccessorDeclarationSyntax> GetAccessors(BasePropertyDeclarationSyntax baseProperty)
=> baseProperty.AccessorList.Accessors;
public override SyntaxNode? TryGetContainingMethodBodyForSpeculation(SyntaxNode node)
{
......
......@@ -15,9 +15,11 @@ namespace Microsoft.CodeAnalysis.SemanticModelReuse
internal abstract class AbstractSemanticModelReuseLanguageService<
TMemberDeclarationSyntax,
TBaseMethodDeclarationSyntax,
TBasePropertyDeclarationSyntax,
TAccessorDeclarationSyntax> : ISemanticModelReuseLanguageService
where TMemberDeclarationSyntax : SyntaxNode
where TBaseMethodDeclarationSyntax : TMemberDeclarationSyntax
where TBasePropertyDeclarationSyntax : TMemberDeclarationSyntax
where TAccessorDeclarationSyntax : SyntaxNode
{
protected abstract ISyntaxFacts SyntaxFacts { get; }
......@@ -25,8 +27,8 @@ internal abstract class AbstractSemanticModelReuseLanguageService<
public abstract SyntaxNode? TryGetContainingMethodBodyForSpeculation(SyntaxNode node);
protected abstract Task<SemanticModel?> TryGetSpeculativeSemanticModelWorkerAsync(SemanticModel previousSemanticModel, SyntaxNode currentBodyNode, CancellationToken cancellationToken);
protected abstract SyntaxList<TAccessorDeclarationSyntax> GetAccessors(TMemberDeclarationSyntax member);
protected abstract TMemberDeclarationSyntax GetAccessorContainerDeclaration(TAccessorDeclarationSyntax currentAccessor);
protected abstract SyntaxList<TAccessorDeclarationSyntax> GetAccessors(TBasePropertyDeclarationSyntax baseProperty);
protected abstract TBasePropertyDeclarationSyntax GetBasePropertyDeclaration(TAccessorDeclarationSyntax accessor);
public Task<SemanticModel?> TryGetSpeculativeSemanticModelAsync(SemanticModel previousSemanticModel, SyntaxNode currentBodyNode, CancellationToken cancellationToken)
{
......@@ -45,10 +47,10 @@ protected SyntaxNode GetPreviousBodyNode(SyntaxNode previousRoot, SyntaxNode cur
// in the case of an accessor, have to find the previous accessor in the previous prop/event corresponding
// to the current prop/event.
var currentContainer = GetAccessorContainerDeclaration(currentAccessor);
var currentContainer = GetBasePropertyDeclaration(currentAccessor);
var previousContainer = GetPreviousBodyNode(previousRoot, currentRoot, currentContainer);
if (previousContainer is not TMemberDeclarationSyntax previousMember)
if (previousContainer is not TBasePropertyDeclarationSyntax previousMember)
{
Debug.Fail("Previous container didn't map back to a normal accessor container.");
return null;
......
......@@ -17,6 +17,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.SemanticModelReuse
Inherits AbstractSemanticModelReuseLanguageService(Of
DeclarationStatementSyntax,
MethodBlockBaseSyntax,
DeclarationStatementSyntax,
AccessorBlockSyntax)
<ImportingConstructor>
......@@ -26,8 +27,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.SemanticModelReuse
Protected Overrides ReadOnly Property SyntaxFacts As ISyntaxFacts = VisualBasicSyntaxFacts.Instance
Protected Overrides Function GetAccessorContainerDeclaration(currentAccessor As AccessorBlockSyntax) As DeclarationStatementSyntax
Dim container = currentAccessor.Parent
Protected Overrides Function GetBasePropertyDeclaration(accessor As AccessorBlockSyntax) As DeclarationStatementSyntax
Dim container = accessor.Parent
Contract.ThrowIfFalse(TypeOf container Is PropertyBlockSyntax OrElse
TypeOf container Is EventBlockSyntax)
Return DirectCast(container, DeclarationStatementSyntax)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册