Skip to content

Commit b1a9705

Browse files
committed
Generate implicit upcast and IsInstance
1 parent 09bf4ab commit b1a9705

81 files changed

Lines changed: 511 additions & 300 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,67 @@ private void GenerateSyntaxWrapper(in GeneratorExecutionContext context, SyntaxD
126126
initializer: null,
127127
semicolonToken: SyntaxFactory.Token(SyntaxKind.SemicolonToken)));
128128

129+
// public static implicit operator CSharpSyntaxNode(SyntaxWrapper wrapper)
130+
// {
131+
// return wrapper.node;
132+
// }
133+
members = members.Add(SyntaxFactory.ConversionOperatorDeclaration(
134+
attributeLists: default,
135+
modifiers: SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword)),
136+
implicitOrExplicitKeyword: SyntaxFactory.Token(SyntaxKind.ImplicitKeyword),
137+
operatorKeyword: SyntaxFactory.Token(SyntaxKind.OperatorKeyword),
138+
type: SyntaxFactory.IdentifierName(concreteBase),
139+
parameterList: SyntaxFactory.ParameterList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Parameter(
140+
attributeLists: default,
141+
modifiers: default,
142+
type: SyntaxFactory.IdentifierName(nodeData.WrapperName),
143+
identifier: SyntaxFactory.Identifier("wrapper"),
144+
@default: null))),
145+
body: SyntaxFactory.Block(SyntaxFactory.ReturnStatement(SyntaxFactory.MemberAccessExpression(
146+
SyntaxKind.SimpleMemberAccessExpression,
147+
expression: SyntaxFactory.IdentifierName("wrapper"),
148+
name: SyntaxFactory.IdentifierName("node")))),
149+
expressionBody: null,
150+
semicolonToken: default));
151+
152+
// public static bool IsInstance(SyntaxNode node)
153+
// {
154+
// return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
155+
// }
156+
members = members.Add(SyntaxFactory.MethodDeclaration(
157+
attributeLists: default,
158+
modifiers: SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword)),
159+
returnType: SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.BoolKeyword)),
160+
explicitInterfaceSpecifier: null,
161+
identifier: SyntaxFactory.Identifier("IsInstance"),
162+
typeParameterList: null,
163+
parameterList: SyntaxFactory.ParameterList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Parameter(
164+
attributeLists: default,
165+
modifiers: default,
166+
type: SyntaxFactory.IdentifierName("SyntaxNode"),
167+
identifier: SyntaxFactory.Identifier("node"),
168+
@default: null))),
169+
constraintClauses: default,
170+
body: SyntaxFactory.Block(
171+
SyntaxFactory.ReturnStatement(SyntaxFactory.BinaryExpression(
172+
SyntaxKind.LogicalAndExpression,
173+
left: SyntaxFactory.BinaryExpression(
174+
SyntaxKind.NotEqualsExpression,
175+
left: SyntaxFactory.IdentifierName("node"),
176+
right: SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)),
177+
right: SyntaxFactory.InvocationExpression(
178+
expression: SyntaxFactory.MemberAccessExpression(
179+
SyntaxKind.SimpleMemberAccessExpression,
180+
expression: SyntaxFactory.IdentifierName("LightupHelpers"),
181+
name: SyntaxFactory.IdentifierName("CanWrapNode")),
182+
argumentList: SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(
183+
new[]
184+
{
185+
SyntaxFactory.Argument(SyntaxFactory.IdentifierName("node")),
186+
SyntaxFactory.Argument(SyntaxFactory.IdentifierName("WrappedType")),
187+
})))))),
188+
expressionBody: null));
189+
129190
var wrapperStruct = SyntaxFactory.StructDeclaration(
130191
attributeLists: default,
131192
modifiers: SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.InternalKeyword), SyntaxFactory.Token(SyntaxKind.ReadOnlyKeyword), SyntaxFactory.Token(SyntaxKind.PartialKeyword)),

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,14 @@ private BaseObjectCreationExpressionSyntaxWrapper(ExpressionSyntax node)
2020
}
2121

2222
public ExpressionSyntax SyntaxNode => this.node;
23+
public static implicit operator ExpressionSyntax(BaseObjectCreationExpressionSyntaxWrapper wrapper)
24+
{
25+
return wrapper.node;
26+
}
27+
28+
public static bool IsInstance(SyntaxNode node)
29+
{
30+
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
31+
}
2332
}
2433
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,14 @@ private BaseParameterSyntaxWrapper(CSharpSyntaxNode node)
2020
}
2121

2222
public CSharpSyntaxNode SyntaxNode => this.node;
23+
public static implicit operator CSharpSyntaxNode(BaseParameterSyntaxWrapper wrapper)
24+
{
25+
return wrapper.node;
26+
}
27+
28+
public static bool IsInstance(SyntaxNode node)
29+
{
30+
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
31+
}
2332
}
2433
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,14 @@ private BinaryPatternSyntaxWrapper(CSharpSyntaxNode node)
2020
}
2121

2222
public CSharpSyntaxNode SyntaxNode => this.node;
23+
public static implicit operator CSharpSyntaxNode(BinaryPatternSyntaxWrapper wrapper)
24+
{
25+
return wrapper.node;
26+
}
27+
28+
public static bool IsInstance(SyntaxNode node)
29+
{
30+
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
31+
}
2332
}
2433
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,14 @@ private CasePatternSwitchLabelSyntaxWrapper(SwitchLabelSyntax node)
2020
}
2121

2222
public SwitchLabelSyntax SyntaxNode => this.node;
23+
public static implicit operator SwitchLabelSyntax(CasePatternSwitchLabelSyntaxWrapper wrapper)
24+
{
25+
return wrapper.node;
26+
}
27+
28+
public static bool IsInstance(SyntaxNode node)
29+
{
30+
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
31+
}
2332
}
2433
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,14 @@ private CommonForEachStatementSyntaxWrapper(StatementSyntax node)
2020
}
2121

2222
public StatementSyntax SyntaxNode => this.node;
23+
public static implicit operator StatementSyntax(CommonForEachStatementSyntaxWrapper wrapper)
24+
{
25+
return wrapper.node;
26+
}
27+
28+
public static bool IsInstance(SyntaxNode node)
29+
{
30+
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
31+
}
2332
}
2433
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,14 @@ private ConstantPatternSyntaxWrapper(CSharpSyntaxNode node)
2020
}
2121

2222
public CSharpSyntaxNode SyntaxNode => this.node;
23+
public static implicit operator CSharpSyntaxNode(ConstantPatternSyntaxWrapper wrapper)
24+
{
25+
return wrapper.node;
26+
}
27+
28+
public static bool IsInstance(SyntaxNode node)
29+
{
30+
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
31+
}
2332
}
2433
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,14 @@ private DeclarationExpressionSyntaxWrapper(ExpressionSyntax node)
2020
}
2121

2222
public ExpressionSyntax SyntaxNode => this.node;
23+
public static implicit operator ExpressionSyntax(DeclarationExpressionSyntaxWrapper wrapper)
24+
{
25+
return wrapper.node;
26+
}
27+
28+
public static bool IsInstance(SyntaxNode node)
29+
{
30+
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
31+
}
2332
}
2433
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,14 @@ private DeclarationPatternSyntaxWrapper(CSharpSyntaxNode node)
2020
}
2121

2222
public CSharpSyntaxNode SyntaxNode => this.node;
23+
public static implicit operator CSharpSyntaxNode(DeclarationPatternSyntaxWrapper wrapper)
24+
{
25+
return wrapper.node;
26+
}
27+
28+
public static bool IsInstance(SyntaxNode node)
29+
{
30+
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
31+
}
2332
}
2433
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,14 @@ private DefaultConstraintSyntaxWrapper(TypeParameterConstraintSyntax node)
2020
}
2121

2222
public TypeParameterConstraintSyntax SyntaxNode => this.node;
23+
public static implicit operator TypeParameterConstraintSyntax(DefaultConstraintSyntaxWrapper wrapper)
24+
{
25+
return wrapper.node;
26+
}
27+
28+
public static bool IsInstance(SyntaxNode node)
29+
{
30+
return node != null && LightupHelpers.CanWrapNode(node, WrappedType);
31+
}
2332
}
2433
}

0 commit comments

Comments
 (0)