142 lines
4.9 KiB
C#
142 lines
4.9 KiB
C#
using System;
|
|||
|
|
using System.Collections.Generic;
|
||
|
|
using Roslyn.Utilities;
|
||
|
|
|
||
|
|
namespace Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax;
|
||
|
|
|
||
|
|
internal sealed class QualifiedCrefSyntax : CrefSyntax
|
||
|
|
{
|
||
|
|
internal readonly TypeSyntax container;
|
||
|
|
|
||
|
|
internal readonly SyntaxToken dotToken;
|
||
|
|
|
||
|
|
internal readonly MemberCrefSyntax member;
|
||
|
|
|
||
|
|
public TypeSyntax Container => container;
|
||
|
|
|
||
|
|
public SyntaxToken DotToken => dotToken;
|
||
|
|
|
||
|
|
public MemberCrefSyntax Member => member;
|
||
|
|
|
||
|
|
internal QualifiedCrefSyntax(SyntaxKind kind, TypeSyntax container, SyntaxToken dotToken, MemberCrefSyntax member, DiagnosticInfo[]? diagnostics, SyntaxAnnotation[]? annotations)
|
||
|
|
: base(kind, diagnostics, annotations)
|
||
|
|
{
|
||
|
|
((GreenNode)this).SlotCount = 3;
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)container);
|
||
|
|
this.container = container;
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)dotToken);
|
||
|
|
this.dotToken = dotToken;
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)member);
|
||
|
|
this.member = member;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal QualifiedCrefSyntax(SyntaxKind kind, TypeSyntax container, SyntaxToken dotToken, MemberCrefSyntax member, SyntaxFactoryContext context)
|
||
|
|
: base(kind)
|
||
|
|
{
|
||
|
|
SetFactoryContext(context);
|
||
|
|
((GreenNode)this).SlotCount = 3;
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)container);
|
||
|
|
this.container = container;
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)dotToken);
|
||
|
|
this.dotToken = dotToken;
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)member);
|
||
|
|
this.member = member;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal QualifiedCrefSyntax(SyntaxKind kind, TypeSyntax container, SyntaxToken dotToken, MemberCrefSyntax member)
|
||
|
|
: base(kind)
|
||
|
|
{
|
||
|
|
((GreenNode)this).SlotCount = 3;
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)container);
|
||
|
|
this.container = container;
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)dotToken);
|
||
|
|
this.dotToken = dotToken;
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)member);
|
||
|
|
this.member = member;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override GreenNode? GetSlot(int index)
|
||
|
|
{
|
||
|
|
return (GreenNode?)(index switch
|
||
|
|
{
|
||
|
|
0 => container,
|
||
|
|
1 => dotToken,
|
||
|
|
2 => member,
|
||
|
|
_ => null,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override SyntaxNode CreateRed(SyntaxNode? parent, int position)
|
||
|
|
{
|
||
|
|
return (SyntaxNode)(object)new Microsoft.CodeAnalysis.CSharp.Syntax.QualifiedCrefSyntax(this, parent, position);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override void Accept(CSharpSyntaxVisitor visitor)
|
||
|
|
{
|
||
|
|
visitor.VisitQualifiedCref(this);
|
||
|
|
}
|
||
|
|
|
||
|
|
public override TResult Accept<TResult>(CSharpSyntaxVisitor<TResult> visitor)
|
||
|
|
{
|
||
|
|
return visitor.VisitQualifiedCref(this);
|
||
|
|
}
|
||
|
|
|
||
|
|
public QualifiedCrefSyntax Update(TypeSyntax container, SyntaxToken dotToken, MemberCrefSyntax member)
|
||
|
|
{
|
||
|
|
if (container != Container || dotToken != DotToken || member != Member)
|
||
|
|
{
|
||
|
|
QualifiedCrefSyntax qualifiedCrefSyntax = SyntaxFactory.QualifiedCref(container, dotToken, member);
|
||
|
|
DiagnosticInfo[] diagnostics = ((GreenNode)this).GetDiagnostics();
|
||
|
|
if (diagnostics != null && diagnostics.Length != 0)
|
||
|
|
{
|
||
|
|
qualifiedCrefSyntax = GreenNodeExtensions.WithDiagnosticsGreen<QualifiedCrefSyntax>(qualifiedCrefSyntax, diagnostics);
|
||
|
|
}
|
||
|
|
SyntaxAnnotation[] annotations = ((GreenNode)this).GetAnnotations();
|
||
|
|
if (annotations != null && annotations.Length != 0)
|
||
|
|
{
|
||
|
|
qualifiedCrefSyntax = GreenNodeExtensions.WithAnnotationsGreen<QualifiedCrefSyntax>(qualifiedCrefSyntax, (IEnumerable<SyntaxAnnotation>)annotations);
|
||
|
|
}
|
||
|
|
return qualifiedCrefSyntax;
|
||
|
|
}
|
||
|
|
return this;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override GreenNode SetDiagnostics(DiagnosticInfo[]? diagnostics)
|
||
|
|
{
|
||
|
|
return (GreenNode)(object)new QualifiedCrefSyntax(base.Kind, container, dotToken, member, diagnostics, ((GreenNode)this).GetAnnotations());
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override GreenNode SetAnnotations(SyntaxAnnotation[]? annotations)
|
||
|
|
{
|
||
|
|
return (GreenNode)(object)new QualifiedCrefSyntax(base.Kind, container, dotToken, member, ((GreenNode)this).GetDiagnostics(), annotations);
|
||
|
|
}
|
||
|
|
|
||
|
|
internal QualifiedCrefSyntax(ObjectReader reader)
|
||
|
|
: base(reader)
|
||
|
|
{
|
||
|
|
((GreenNode)this).SlotCount = 3;
|
||
|
|
TypeSyntax typeSyntax = (TypeSyntax)reader.ReadValue();
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)typeSyntax);
|
||
|
|
container = typeSyntax;
|
||
|
|
SyntaxToken syntaxToken = (SyntaxToken)reader.ReadValue();
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)syntaxToken);
|
||
|
|
dotToken = syntaxToken;
|
||
|
|
MemberCrefSyntax memberCrefSyntax = (MemberCrefSyntax)reader.ReadValue();
|
||
|
|
((GreenNode)this).AdjustFlagsAndWidth((GreenNode)(object)memberCrefSyntax);
|
||
|
|
member = memberCrefSyntax;
|
||
|
|
}
|
||
|
|
|
||
|
|
internal override void WriteTo(ObjectWriter writer)
|
||
|
|
{
|
||
|
|
((GreenNode)this).WriteTo(writer);
|
||
|
|
writer.WriteValue((IObjectWritable)(object)container);
|
||
|
|
writer.WriteValue((IObjectWritable)(object)dotToken);
|
||
|
|
writer.WriteValue((IObjectWritable)(object)member);
|
||
|
|
}
|
||
|
|
|
||
|
|
static QualifiedCrefSyntax()
|
||
|
|
{
|
||
|
|
ObjectBinder.RegisterTypeReader(typeof(QualifiedCrefSyntax), (Func<ObjectReader, IObjectWritable>)((ObjectReader r) => (IObjectWritable)(object)new QualifiedCrefSyntax(r)));
|
||
|
|
}
|
||
|
|
}
|