Skip to content

Commit 613a1f9

Browse files
committed
Added support for property default values.
Updated Microsoft.CodeAnalysis.CSharp to 4.10.0.
1 parent 1f03468 commit 613a1f9

File tree

2 files changed

+72
-17
lines changed

2 files changed

+72
-17
lines changed

CSharpToJavaScript/CSharpToJavaScript.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
</PropertyGroup>
2121

2222
<ItemGroup>
23-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
23+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.10.0" />
2424
</ItemGroup>
2525

2626
<ItemGroup>

CSharpToJavaScript/Walker.cs

Lines changed: 71 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,7 +1014,11 @@ public override void VisitPropertyDeclaration(PropertyDeclarationSyntax node)
10141014
{
10151015
ChildSyntaxList nodesAndTokens = node.ChildNodesAndTokens();
10161016

1017-
for (int i = 0; i < nodesAndTokens.Count; i++)
1017+
FieldDeclarationSyntax? field = null;
1018+
bool hasDefault = false;
1019+
EqualsValueClauseSyntax? defaultValue = null;
1020+
1021+
for (int i = nodesAndTokens.Count - 1; i >= 0; i--)
10181022
{
10191023
SyntaxNode? asNode = nodesAndTokens[i].AsNode();
10201024

@@ -1033,8 +1037,6 @@ where n.IsNode
10331037
where n.AsNode().IsKind(SyntaxKind.PredefinedType)
10341038
select n;
10351039

1036-
FieldDeclarationSyntax? field = null;
1037-
10381040
string _indentifier = "_" + nodesAndTokens[i - 1].AsToken().ToString() + "_";
10391041

10401042
if (!_PropertyStatic)
@@ -1063,8 +1065,52 @@ where n.AsNode().IsKind(SyntaxKind.NullableType)
10631065
select n;
10641066
}
10651067

1066-
field = SyntaxFactory.FieldDeclaration(
1067-
SyntaxFactory.VariableDeclaration(SyntaxFactory.IdentifierName(key.First().ToString()))
1068+
1069+
//
1070+
//
1071+
//TODO! change this mess!
1072+
if (hasDefault)
1073+
{
1074+
field = SyntaxFactory.FieldDeclaration(
1075+
SyntaxFactory.VariableDeclaration(SyntaxFactory.IdentifierName(key.First().ToString()))
1076+
.WithVariables(
1077+
SyntaxFactory.SingletonSeparatedList(
1078+
SyntaxFactory.VariableDeclarator(
1079+
SyntaxFactory.Identifier(_indentifier))
1080+
.WithInitializer(defaultValue))))
1081+
.WithModifiers(
1082+
SyntaxFactory.TokenList(new[]
1083+
{
1084+
SyntaxFactory.Token(SyntaxKind.PrivateKeyword)
1085+
}))
1086+
.WithLeadingTrivia(node.GetLeadingTrivia())
1087+
.WithTrailingTrivia(node.GetTrailingTrivia());
1088+
}
1089+
else
1090+
{
1091+
field = SyntaxFactory.FieldDeclaration(
1092+
SyntaxFactory.VariableDeclaration(SyntaxFactory.IdentifierName(key.First().ToString()))
1093+
.WithVariables(
1094+
SyntaxFactory.SingletonSeparatedList(
1095+
SyntaxFactory.VariableDeclarator(
1096+
SyntaxFactory.Identifier(_indentifier)))))
1097+
.WithModifiers(
1098+
SyntaxFactory.TokenList(new[]
1099+
{
1100+
SyntaxFactory.Token(SyntaxKind.PrivateKeyword)
1101+
}))
1102+
.WithLeadingTrivia(node.GetLeadingTrivia())
1103+
.WithTrailingTrivia(node.GetTrailingTrivia());
1104+
}
1105+
}
1106+
else
1107+
{
1108+
key = key.First().ChildNodesAndTokens();
1109+
if (hasDefault)
1110+
{
1111+
field = SyntaxFactory.FieldDeclaration(
1112+
SyntaxFactory.VariableDeclaration(
1113+
SyntaxFactory.PredefinedType(SyntaxFactory.Token(key.First().Kind())))
10681114
.WithVariables(
10691115
SyntaxFactory.SingletonSeparatedList(
10701116
SyntaxFactory.VariableDeclarator(
@@ -1076,32 +1122,36 @@ where n.AsNode().IsKind(SyntaxKind.NullableType)
10761122
}))
10771123
.WithLeadingTrivia(node.GetLeadingTrivia())
10781124
.WithTrailingTrivia(node.GetTrailingTrivia());
1079-
}
1080-
else
1081-
{
1082-
key = key.First().ChildNodesAndTokens();
1083-
field = SyntaxFactory.FieldDeclaration(
1125+
}
1126+
else
1127+
{
1128+
field = SyntaxFactory.FieldDeclaration(
10841129
SyntaxFactory.VariableDeclaration(
10851130
SyntaxFactory.PredefinedType(SyntaxFactory.Token(key.First().Kind())))
10861131
.WithVariables(
10871132
SyntaxFactory.SingletonSeparatedList(
10881133
SyntaxFactory.VariableDeclarator(
1089-
SyntaxFactory.Identifier(_indentifier)))))
1134+
SyntaxFactory.Identifier(_indentifier))
1135+
.WithInitializer(defaultValue))))
10901136
.WithModifiers(
10911137
SyntaxFactory.TokenList(new[]
10921138
{
10931139
SyntaxFactory.Token(SyntaxKind.PrivateKeyword)
10941140
}))
10951141
.WithLeadingTrivia(node.GetLeadingTrivia())
10961142
.WithTrailingTrivia(node.GetTrailingTrivia());
1143+
}
10971144
}
1098-
1099-
VisitFieldDeclaration(field);
1100-
break;
11011145
}
11021146
}
1147+
1148+
if (kind == SyntaxKind.EqualsValueClause)
1149+
{
1150+
hasDefault = true;
1151+
defaultValue = asNode as EqualsValueClauseSyntax;
1152+
}
11031153
}
1104-
else
1154+
else
11051155
{
11061156
SyntaxToken asToken = nodesAndTokens[i].AsToken();
11071157
SyntaxKind kind = asToken.Kind();
@@ -1112,6 +1162,12 @@ where n.AsNode().IsKind(SyntaxKind.NullableType)
11121162

11131163
}
11141164

1165+
if(field != null)
1166+
VisitFieldDeclaration(field);
1167+
1168+
1169+
1170+
//main for loop for property
11151171
for (int i = 0; i < nodesAndTokens.Count; i++)
11161172
{
11171173
SyntaxNode? asNode = nodesAndTokens[i].AsNode();
@@ -1122,7 +1178,6 @@ where n.AsNode().IsKind(SyntaxKind.NullableType)
11221178

11231179
switch (kind)
11241180
{
1125-
//TODO "EqualsValueClause" default value
11261181
case SyntaxKind.EqualsValueClause:
11271182
case SyntaxKind.AttributeList:
11281183
case SyntaxKind.PredefinedType:

0 commit comments

Comments
 (0)