-
Notifications
You must be signed in to change notification settings - Fork 4k
/
TypeDeclarationSyntax.cs
125 lines (114 loc) · 5.76 KB
/
TypeDeclarationSyntax.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp.Syntax
{
public abstract partial class TypeDeclarationSyntax
{
public int Arity
{
get
{
return this.TypeParameterList == null ? 0 : this.TypeParameterList.Parameters.Count;
}
}
public new TypeDeclarationSyntax AddAttributeLists(params AttributeListSyntax[] items)
=> (TypeDeclarationSyntax)AddAttributeListsCore(items);
public new TypeDeclarationSyntax AddModifiers(params SyntaxToken[] items)
=> (TypeDeclarationSyntax)AddModifiersCore(items);
public new TypeDeclarationSyntax WithAttributeLists(SyntaxList<AttributeListSyntax> attributeLists)
=> (TypeDeclarationSyntax)WithAttributeListsCore(attributeLists);
public new TypeDeclarationSyntax WithModifiers(SyntaxTokenList modifiers)
=> (TypeDeclarationSyntax)WithModifiersCore(modifiers);
}
}
namespace Microsoft.CodeAnalysis.CSharp
{
public static partial class SyntaxFactory
{
internal static SyntaxKind GetTypeDeclarationKeywordKind(DeclarationKind kind)
{
switch (kind)
{
case DeclarationKind.Class:
return SyntaxKind.ClassKeyword;
case DeclarationKind.Struct:
return SyntaxKind.StructKeyword;
case DeclarationKind.Interface:
return SyntaxKind.InterfaceKeyword;
default:
throw ExceptionUtilities.UnexpectedValue(kind);
}
}
private static SyntaxKind GetTypeDeclarationKeywordKind(SyntaxKind kind)
{
switch (kind)
{
case SyntaxKind.ClassDeclaration:
return SyntaxKind.ClassKeyword;
case SyntaxKind.StructDeclaration:
return SyntaxKind.StructKeyword;
case SyntaxKind.InterfaceDeclaration:
return SyntaxKind.InterfaceKeyword;
case SyntaxKind.RecordDeclaration:
case SyntaxKind.RecordStructDeclaration:
return SyntaxKind.RecordKeyword;
default:
throw ExceptionUtilities.UnexpectedValue(kind);
}
}
public static TypeDeclarationSyntax TypeDeclaration(SyntaxKind kind, SyntaxToken identifier)
{
return TypeDeclaration(
kind,
default(SyntaxList<AttributeListSyntax>),
default(SyntaxTokenList),
SyntaxFactory.Token(GetTypeDeclarationKeywordKind(kind)),
identifier,
typeParameterList: null,
baseList: null,
default(SyntaxList<TypeParameterConstraintClauseSyntax>),
SyntaxFactory.Token(SyntaxKind.OpenBraceToken),
default(SyntaxList<MemberDeclarationSyntax>),
SyntaxFactory.Token(SyntaxKind.CloseBraceToken),
default(SyntaxToken));
}
public static TypeDeclarationSyntax TypeDeclaration(SyntaxKind kind, string identifier)
{
return SyntaxFactory.TypeDeclaration(kind, SyntaxFactory.Identifier(identifier));
}
public static TypeDeclarationSyntax TypeDeclaration(
SyntaxKind kind,
SyntaxList<AttributeListSyntax> attributes,
SyntaxTokenList modifiers,
SyntaxToken keyword,
SyntaxToken identifier,
TypeParameterListSyntax? typeParameterList,
BaseListSyntax? baseList,
SyntaxList<TypeParameterConstraintClauseSyntax> constraintClauses,
SyntaxToken openBraceToken,
SyntaxList<MemberDeclarationSyntax> members,
SyntaxToken closeBraceToken,
SyntaxToken semicolonToken)
{
switch (kind)
{
case SyntaxKind.ClassDeclaration:
return SyntaxFactory.ClassDeclaration(attributes, modifiers, keyword, identifier, typeParameterList, baseList, constraintClauses, openBraceToken, members, closeBraceToken, semicolonToken);
case SyntaxKind.StructDeclaration:
return SyntaxFactory.StructDeclaration(attributes, modifiers, keyword, identifier, typeParameterList, baseList, constraintClauses, openBraceToken, members, closeBraceToken, semicolonToken);
case SyntaxKind.InterfaceDeclaration:
return SyntaxFactory.InterfaceDeclaration(attributes, modifiers, keyword, identifier, typeParameterList, baseList, constraintClauses, openBraceToken, members, closeBraceToken, semicolonToken);
case SyntaxKind.RecordDeclaration:
return SyntaxFactory.RecordDeclaration(SyntaxKind.RecordDeclaration, attributes, modifiers, keyword, classOrStructKeyword: default, identifier, typeParameterList, parameterList: null, baseList, constraintClauses, openBraceToken, members, closeBraceToken, semicolonToken);
case SyntaxKind.RecordStructDeclaration:
return SyntaxFactory.RecordDeclaration(SyntaxKind.RecordStructDeclaration, attributes, modifiers, keyword, classOrStructKeyword: SyntaxFactory.Token(SyntaxKind.StructKeyword), identifier, typeParameterList, parameterList: null, baseList, constraintClauses, openBraceToken, members, closeBraceToken, semicolonToken);
default:
throw ExceptionUtilities.UnexpectedValue(kind);
}
}
}
}