Skip to content

Commit f28124f

Browse files
committed
Generate wrapper conversion operators
1 parent 5b17a6d commit f28124f

27 files changed

+332
-90
lines changed

StyleCop.Analyzers/StyleCop.Analyzers.CodeGeneration/SyntaxLightupGenerator.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,35 @@ private void GenerateSyntaxWrapper(in GeneratorExecutionContext context, SyntaxD
433433
semicolonToken: default));
434434
}
435435

436+
for (var baseNode = syntaxData.TryGetNode(nodeData.BaseName); baseNode?.WrapperName is not null; baseNode = syntaxData.TryGetNode(baseNode.BaseName))
437+
{
438+
// public static explicit operator SyntaxWrapper(BaseSyntaxWrapper node)
439+
// {
440+
// return (SyntaxWrapper)node.SyntaxNode;
441+
// }
442+
members = members.Add(SyntaxFactory.ConversionOperatorDeclaration(
443+
attributeLists: default,
444+
modifiers: SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword)),
445+
implicitOrExplicitKeyword: SyntaxFactory.Token(SyntaxKind.ExplicitKeyword),
446+
operatorKeyword: SyntaxFactory.Token(SyntaxKind.OperatorKeyword),
447+
type: SyntaxFactory.IdentifierName(nodeData.WrapperName),
448+
parameterList: SyntaxFactory.ParameterList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Parameter(
449+
attributeLists: default,
450+
modifiers: default,
451+
type: SyntaxFactory.IdentifierName(baseNode.WrapperName),
452+
identifier: SyntaxFactory.Identifier("node"),
453+
@default: null))),
454+
body: SyntaxFactory.Block(SyntaxFactory.ReturnStatement(
455+
SyntaxFactory.CastExpression(
456+
type: SyntaxFactory.IdentifierName(nodeData.WrapperName),
457+
expression: SyntaxFactory.MemberAccessExpression(
458+
SyntaxKind.SimpleMemberAccessExpression,
459+
expression: SyntaxFactory.IdentifierName("node"),
460+
name: SyntaxFactory.IdentifierName("SyntaxNode"))))),
461+
expressionBody: null,
462+
semicolonToken: default));
463+
}
464+
436465
// public static explicit operator WhenClauseSyntaxWrapper(SyntaxNode node)
437466
// {
438467
// if (node == null)
@@ -521,6 +550,39 @@ private void GenerateSyntaxWrapper(in GeneratorExecutionContext context, SyntaxD
521550
expressionBody: null,
522551
semicolonToken: default));
523552

553+
for (var baseNode = syntaxData.TryGetNode(nodeData.BaseName); baseNode?.WrapperName is not null; baseNode = syntaxData.TryGetNode(baseNode.BaseName))
554+
{
555+
// public static implicit operator BaseSyntaxWrapper(SyntaxWrapper wrapper)
556+
// {
557+
// return BaseSyntaxWrapper.FromUpcast(wrapper.node);
558+
// }
559+
members = members.Add(SyntaxFactory.ConversionOperatorDeclaration(
560+
attributeLists: default,
561+
modifiers: SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword)),
562+
implicitOrExplicitKeyword: SyntaxFactory.Token(SyntaxKind.ImplicitKeyword),
563+
operatorKeyword: SyntaxFactory.Token(SyntaxKind.OperatorKeyword),
564+
type: SyntaxFactory.IdentifierName(baseNode.WrapperName),
565+
parameterList: SyntaxFactory.ParameterList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Parameter(
566+
attributeLists: default,
567+
modifiers: default,
568+
type: SyntaxFactory.IdentifierName(nodeData.WrapperName),
569+
identifier: SyntaxFactory.Identifier("wrapper"),
570+
@default: null))),
571+
body: SyntaxFactory.Block(SyntaxFactory.ReturnStatement(
572+
SyntaxFactory.InvocationExpression(
573+
expression: SyntaxFactory.MemberAccessExpression(
574+
SyntaxKind.SimpleMemberAccessExpression,
575+
expression: SyntaxFactory.IdentifierName(baseNode.WrapperName),
576+
name: SyntaxFactory.IdentifierName("FromUpcast")),
577+
argumentList: SyntaxFactory.ArgumentList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Argument(
578+
SyntaxFactory.MemberAccessExpression(
579+
SyntaxKind.SimpleMemberAccessExpression,
580+
expression: SyntaxFactory.IdentifierName("wrapper"),
581+
name: SyntaxFactory.IdentifierName("node")))))))),
582+
expressionBody: null,
583+
semicolonToken: default));
584+
}
585+
524586
// public static implicit operator CSharpSyntaxNode(SyntaxWrapper wrapper)
525587
// {
526588
// return wrapper.node;

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/BinaryPatternSyntaxWrapper.g.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,16 @@ public PatternSyntaxWrapper Right
6161
}
6262
}
6363

64+
public static explicit operator BinaryPatternSyntaxWrapper(PatternSyntaxWrapper node)
65+
{
66+
return (BinaryPatternSyntaxWrapper)node.SyntaxNode;
67+
}
68+
69+
public static explicit operator BinaryPatternSyntaxWrapper(ExpressionOrPatternSyntaxWrapper node)
70+
{
71+
return (BinaryPatternSyntaxWrapper)node.SyntaxNode;
72+
}
73+
6474
public static explicit operator BinaryPatternSyntaxWrapper(SyntaxNode node)
6575
{
6676
if (node == null)
@@ -76,6 +86,16 @@ public static explicit operator BinaryPatternSyntaxWrapper(SyntaxNode node)
7686
return new BinaryPatternSyntaxWrapper((CSharpSyntaxNode)node);
7787
}
7888

89+
public static implicit operator PatternSyntaxWrapper(BinaryPatternSyntaxWrapper wrapper)
90+
{
91+
return PatternSyntaxWrapper.FromUpcast(wrapper.node);
92+
}
93+
94+
public static implicit operator ExpressionOrPatternSyntaxWrapper(BinaryPatternSyntaxWrapper wrapper)
95+
{
96+
return ExpressionOrPatternSyntaxWrapper.FromUpcast(wrapper.node);
97+
}
98+
7999
public static implicit operator CSharpSyntaxNode(BinaryPatternSyntaxWrapper wrapper)
80100
{
81101
return wrapper.node;

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/ConstantPatternSyntaxWrapper.g.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ public ExpressionSyntax Expression
3737
}
3838
}
3939

40+
public static explicit operator ConstantPatternSyntaxWrapper(PatternSyntaxWrapper node)
41+
{
42+
return (ConstantPatternSyntaxWrapper)node.SyntaxNode;
43+
}
44+
45+
public static explicit operator ConstantPatternSyntaxWrapper(ExpressionOrPatternSyntaxWrapper node)
46+
{
47+
return (ConstantPatternSyntaxWrapper)node.SyntaxNode;
48+
}
49+
4050
public static explicit operator ConstantPatternSyntaxWrapper(SyntaxNode node)
4151
{
4252
if (node == null)
@@ -52,6 +62,16 @@ public static explicit operator ConstantPatternSyntaxWrapper(SyntaxNode node)
5262
return new ConstantPatternSyntaxWrapper((CSharpSyntaxNode)node);
5363
}
5464

65+
public static implicit operator PatternSyntaxWrapper(ConstantPatternSyntaxWrapper wrapper)
66+
{
67+
return PatternSyntaxWrapper.FromUpcast(wrapper.node);
68+
}
69+
70+
public static implicit operator ExpressionOrPatternSyntaxWrapper(ConstantPatternSyntaxWrapper wrapper)
71+
{
72+
return ExpressionOrPatternSyntaxWrapper.FromUpcast(wrapper.node);
73+
}
74+
5575
public static implicit operator CSharpSyntaxNode(ConstantPatternSyntaxWrapper wrapper)
5676
{
5777
return wrapper.node;

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/DeclarationPatternSyntaxWrapper.g.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,16 @@ public VariableDesignationSyntaxWrapper Designation
4949
}
5050
}
5151

52+
public static explicit operator DeclarationPatternSyntaxWrapper(PatternSyntaxWrapper node)
53+
{
54+
return (DeclarationPatternSyntaxWrapper)node.SyntaxNode;
55+
}
56+
57+
public static explicit operator DeclarationPatternSyntaxWrapper(ExpressionOrPatternSyntaxWrapper node)
58+
{
59+
return (DeclarationPatternSyntaxWrapper)node.SyntaxNode;
60+
}
61+
5262
public static explicit operator DeclarationPatternSyntaxWrapper(SyntaxNode node)
5363
{
5464
if (node == null)
@@ -64,6 +74,16 @@ public static explicit operator DeclarationPatternSyntaxWrapper(SyntaxNode node)
6474
return new DeclarationPatternSyntaxWrapper((CSharpSyntaxNode)node);
6575
}
6676

77+
public static implicit operator PatternSyntaxWrapper(DeclarationPatternSyntaxWrapper wrapper)
78+
{
79+
return PatternSyntaxWrapper.FromUpcast(wrapper.node);
80+
}
81+
82+
public static implicit operator ExpressionOrPatternSyntaxWrapper(DeclarationPatternSyntaxWrapper wrapper)
83+
{
84+
return ExpressionOrPatternSyntaxWrapper.FromUpcast(wrapper.node);
85+
}
86+
6787
public static implicit operator CSharpSyntaxNode(DeclarationPatternSyntaxWrapper wrapper)
6888
{
6989
return wrapper.node;

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/DiscardDesignationSyntaxWrapper.g.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ public SyntaxToken UnderscoreToken
3737
}
3838
}
3939

40+
public static explicit operator DiscardDesignationSyntaxWrapper(VariableDesignationSyntaxWrapper node)
41+
{
42+
return (DiscardDesignationSyntaxWrapper)node.SyntaxNode;
43+
}
44+
4045
public static explicit operator DiscardDesignationSyntaxWrapper(SyntaxNode node)
4146
{
4247
if (node == null)
@@ -52,6 +57,11 @@ public static explicit operator DiscardDesignationSyntaxWrapper(SyntaxNode node)
5257
return new DiscardDesignationSyntaxWrapper((CSharpSyntaxNode)node);
5358
}
5459

60+
public static implicit operator VariableDesignationSyntaxWrapper(DiscardDesignationSyntaxWrapper wrapper)
61+
{
62+
return VariableDesignationSyntaxWrapper.FromUpcast(wrapper.node);
63+
}
64+
5565
public static implicit operator CSharpSyntaxNode(DiscardDesignationSyntaxWrapper wrapper)
5666
{
5767
return wrapper.node;

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/DiscardPatternSyntaxWrapper.g.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ public SyntaxToken UnderscoreToken
3737
}
3838
}
3939

40+
public static explicit operator DiscardPatternSyntaxWrapper(PatternSyntaxWrapper node)
41+
{
42+
return (DiscardPatternSyntaxWrapper)node.SyntaxNode;
43+
}
44+
45+
public static explicit operator DiscardPatternSyntaxWrapper(ExpressionOrPatternSyntaxWrapper node)
46+
{
47+
return (DiscardPatternSyntaxWrapper)node.SyntaxNode;
48+
}
49+
4050
public static explicit operator DiscardPatternSyntaxWrapper(SyntaxNode node)
4151
{
4252
if (node == null)
@@ -52,6 +62,16 @@ public static explicit operator DiscardPatternSyntaxWrapper(SyntaxNode node)
5262
return new DiscardPatternSyntaxWrapper((CSharpSyntaxNode)node);
5363
}
5464

65+
public static implicit operator PatternSyntaxWrapper(DiscardPatternSyntaxWrapper wrapper)
66+
{
67+
return PatternSyntaxWrapper.FromUpcast(wrapper.node);
68+
}
69+
70+
public static implicit operator ExpressionOrPatternSyntaxWrapper(DiscardPatternSyntaxWrapper wrapper)
71+
{
72+
return ExpressionOrPatternSyntaxWrapper.FromUpcast(wrapper.node);
73+
}
74+
5575
public static implicit operator CSharpSyntaxNode(DiscardPatternSyntaxWrapper wrapper)
5676
{
5777
return wrapper.node;

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/ForEachVariableStatementSyntaxWrapper.g.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ public StatementSyntax Statement
109109
}
110110
}
111111

112+
public static explicit operator ForEachVariableStatementSyntaxWrapper(CommonForEachStatementSyntaxWrapper node)
113+
{
114+
return (ForEachVariableStatementSyntaxWrapper)node.SyntaxNode;
115+
}
116+
112117
public static explicit operator ForEachVariableStatementSyntaxWrapper(SyntaxNode node)
113118
{
114119
if (node == null)
@@ -124,6 +129,11 @@ public static explicit operator ForEachVariableStatementSyntaxWrapper(SyntaxNode
124129
return new ForEachVariableStatementSyntaxWrapper((StatementSyntax)node);
125130
}
126131

132+
public static implicit operator CommonForEachStatementSyntaxWrapper(ForEachVariableStatementSyntaxWrapper wrapper)
133+
{
134+
return CommonForEachStatementSyntaxWrapper.FromUpcast(wrapper.node);
135+
}
136+
127137
public static implicit operator StatementSyntax(ForEachVariableStatementSyntaxWrapper wrapper)
128138
{
129139
return wrapper.node;

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/FunctionPointerParameterSyntaxWrapper.g.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ public TypeSyntax Type
5555
}
5656
}
5757

58+
public static explicit operator FunctionPointerParameterSyntaxWrapper(BaseParameterSyntaxWrapper node)
59+
{
60+
return (FunctionPointerParameterSyntaxWrapper)node.SyntaxNode;
61+
}
62+
5863
public static explicit operator FunctionPointerParameterSyntaxWrapper(SyntaxNode node)
5964
{
6065
if (node == null)
@@ -70,6 +75,11 @@ public static explicit operator FunctionPointerParameterSyntaxWrapper(SyntaxNode
7075
return new FunctionPointerParameterSyntaxWrapper((CSharpSyntaxNode)node);
7176
}
7277

78+
public static implicit operator BaseParameterSyntaxWrapper(FunctionPointerParameterSyntaxWrapper wrapper)
79+
{
80+
return BaseParameterSyntaxWrapper.FromUpcast(wrapper.node);
81+
}
82+
7383
public static implicit operator CSharpSyntaxNode(FunctionPointerParameterSyntaxWrapper wrapper)
7484
{
7585
return wrapper.node;

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/ImplicitObjectCreationExpressionSyntaxWrapper.g.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ public InitializerExpressionSyntax Initializer
5555
}
5656
}
5757

58+
public static explicit operator ImplicitObjectCreationExpressionSyntaxWrapper(BaseObjectCreationExpressionSyntaxWrapper node)
59+
{
60+
return (ImplicitObjectCreationExpressionSyntaxWrapper)node.SyntaxNode;
61+
}
62+
5863
public static explicit operator ImplicitObjectCreationExpressionSyntaxWrapper(SyntaxNode node)
5964
{
6065
if (node == null)
@@ -70,6 +75,11 @@ public static explicit operator ImplicitObjectCreationExpressionSyntaxWrapper(Sy
7075
return new ImplicitObjectCreationExpressionSyntaxWrapper((ExpressionSyntax)node);
7176
}
7277

78+
public static implicit operator BaseObjectCreationExpressionSyntaxWrapper(ImplicitObjectCreationExpressionSyntaxWrapper wrapper)
79+
{
80+
return BaseObjectCreationExpressionSyntaxWrapper.FromUpcast(wrapper.node);
81+
}
82+
7383
public static implicit operator ExpressionSyntax(ImplicitObjectCreationExpressionSyntaxWrapper wrapper)
7484
{
7585
return wrapper.node;

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.SyntaxLightupGenerator/ParenthesizedPatternSyntaxWrapper.g.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,16 @@ public SyntaxToken CloseParenToken
6161
}
6262
}
6363

64+
public static explicit operator ParenthesizedPatternSyntaxWrapper(PatternSyntaxWrapper node)
65+
{
66+
return (ParenthesizedPatternSyntaxWrapper)node.SyntaxNode;
67+
}
68+
69+
public static explicit operator ParenthesizedPatternSyntaxWrapper(ExpressionOrPatternSyntaxWrapper node)
70+
{
71+
return (ParenthesizedPatternSyntaxWrapper)node.SyntaxNode;
72+
}
73+
6474
public static explicit operator ParenthesizedPatternSyntaxWrapper(SyntaxNode node)
6575
{
6676
if (node == null)
@@ -76,6 +86,16 @@ public static explicit operator ParenthesizedPatternSyntaxWrapper(SyntaxNode nod
7686
return new ParenthesizedPatternSyntaxWrapper((CSharpSyntaxNode)node);
7787
}
7888

89+
public static implicit operator PatternSyntaxWrapper(ParenthesizedPatternSyntaxWrapper wrapper)
90+
{
91+
return PatternSyntaxWrapper.FromUpcast(wrapper.node);
92+
}
93+
94+
public static implicit operator ExpressionOrPatternSyntaxWrapper(ParenthesizedPatternSyntaxWrapper wrapper)
95+
{
96+
return ExpressionOrPatternSyntaxWrapper.FromUpcast(wrapper.node);
97+
}
98+
7999
public static implicit operator CSharpSyntaxNode(ParenthesizedPatternSyntaxWrapper wrapper)
80100
{
81101
return wrapper.node;

0 commit comments

Comments
 (0)