Skip to content

Commit f8f0b4b

Browse files
committed
Rewrite IOperationWrapper as a wrapper structure around IOperation
1 parent 50610bc commit f8f0b4b

File tree

126 files changed

+493
-134
lines changed

Some content is hidden

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

126 files changed

+493
-134
lines changed

StyleCop.Analyzers/StyleCop.Analyzers.CodeGeneration/OperationLightupGenerator.cs

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,57 @@ private void GenerateOperationInterface(in SourceProductionContext context, Inte
310310
semicolonToken: SyntaxFactory.Token(SyntaxKind.SemicolonToken)));
311311
}
312312

313+
// public static explicit operator IFieldReferenceOperationWrapper(IOperationWrapper wrapper)
314+
// => FromOperation(wrapper.WrappedOperation);
315+
members = members.Add(SyntaxFactory.ConversionOperatorDeclaration(
316+
attributeLists: default,
317+
modifiers: SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword)),
318+
implicitOrExplicitKeyword: SyntaxFactory.Token(SyntaxKind.ExplicitKeyword),
319+
operatorKeyword: SyntaxFactory.Token(SyntaxKind.OperatorKeyword),
320+
type: SyntaxFactory.IdentifierName(node.WrapperName),
321+
parameterList: SyntaxFactory.ParameterList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Parameter(
322+
attributeLists: default,
323+
modifiers: default,
324+
type: SyntaxFactory.IdentifierName("IOperationWrapper"),
325+
identifier: SyntaxFactory.Identifier("wrapper"),
326+
@default: null))),
327+
body: null,
328+
expressionBody: SyntaxFactory.ArrowExpressionClause(SyntaxFactory.InvocationExpression(
329+
expression: SyntaxFactory.IdentifierName("FromOperation"),
330+
argumentList: SyntaxFactory.ArgumentList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Argument(
331+
SyntaxFactory.MemberAccessExpression(
332+
SyntaxKind.SimpleMemberAccessExpression,
333+
expression: SyntaxFactory.IdentifierName("wrapper"),
334+
name: SyntaxFactory.IdentifierName("WrappedOperation"))))))),
335+
semicolonToken: SyntaxFactory.Token(SyntaxKind.SemicolonToken)));
336+
337+
// public static implicit operator IOperationWrapper(IFieldReferenceOperationWrapper wrapper)
338+
// => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
339+
members = members.Add(SyntaxFactory.ConversionOperatorDeclaration(
340+
attributeLists: default,
341+
modifiers: SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword)),
342+
implicitOrExplicitKeyword: SyntaxFactory.Token(SyntaxKind.ImplicitKeyword),
343+
operatorKeyword: SyntaxFactory.Token(SyntaxKind.OperatorKeyword),
344+
type: SyntaxFactory.IdentifierName("IOperationWrapper"),
345+
parameterList: SyntaxFactory.ParameterList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Parameter(
346+
attributeLists: default,
347+
modifiers: default,
348+
type: SyntaxFactory.IdentifierName(node.WrapperName),
349+
identifier: SyntaxFactory.Identifier("wrapper"),
350+
@default: null))),
351+
body: null,
352+
expressionBody: SyntaxFactory.ArrowExpressionClause(SyntaxFactory.InvocationExpression(
353+
expression: SyntaxFactory.MemberAccessExpression(
354+
SyntaxKind.SimpleMemberAccessExpression,
355+
expression: SyntaxFactory.IdentifierName("IOperationWrapper"),
356+
name: SyntaxFactory.IdentifierName("FromUpcast")),
357+
argumentList: SyntaxFactory.ArgumentList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Argument(
358+
SyntaxFactory.MemberAccessExpression(
359+
SyntaxKind.SimpleMemberAccessExpression,
360+
expression: SyntaxFactory.IdentifierName("wrapper"),
361+
name: SyntaxFactory.IdentifierName("WrappedOperation"))))))),
362+
semicolonToken: SyntaxFactory.Token(SyntaxKind.SemicolonToken)));
363+
313364
if (node.BaseInterface is { } baseDefinition)
314365
{
315366
var inheritedProperties = baseDefinition.Properties;
@@ -556,7 +607,7 @@ private void GenerateOperationInterface(in SourceProductionContext context, Inte
556607
modifiers: SyntaxTokenList.Create(SyntaxFactory.Token(SyntaxKind.InternalKeyword)).Add(SyntaxFactory.Token(SyntaxKind.ReadOnlyKeyword)),
557608
identifier: SyntaxFactory.Identifier(node.WrapperName),
558609
typeParameterList: null,
559-
baseList: SyntaxFactory.BaseList(SyntaxFactory.SingletonSeparatedList<BaseTypeSyntax>(SyntaxFactory.SimpleBaseType(SyntaxFactory.IdentifierName("IOperationWrapper")))),
610+
baseList: null,
560611
constraintClauses: default,
561612
members: members);
562613
var wrapperNamespace = SyntaxFactory.NamespaceDeclaration(
@@ -637,6 +688,21 @@ private void GenerateOperationWrapperHelper(in SourceProductionContext context,
637688
SyntaxFactory.IdentifierName("Type"),
638689
})))))))))));
639690

691+
// builder.Add(typeof(IOperationWrapper), typeof(IOperation));
692+
staticCtorStatements = staticCtorStatements.Add(SyntaxFactory.ExpressionStatement(
693+
SyntaxFactory.InvocationExpression(
694+
expression: SyntaxFactory.MemberAccessExpression(
695+
SyntaxKind.SimpleMemberAccessExpression,
696+
expression: SyntaxFactory.IdentifierName("builder"),
697+
name: SyntaxFactory.IdentifierName("Add")),
698+
argumentList: SyntaxFactory.ArgumentList(
699+
SyntaxFactory.SeparatedList(
700+
new[]
701+
{
702+
SyntaxFactory.Argument(SyntaxFactory.TypeOfExpression(SyntaxFactory.IdentifierName("IOperationWrapper"))),
703+
SyntaxFactory.Argument(SyntaxFactory.TypeOfExpression(SyntaxFactory.IdentifierName("IOperation"))),
704+
})))));
705+
640706
foreach (var node in wrapperTypes)
641707
{
642708
// builder.Add(typeof(IArgumentOperationWrapper), codeAnalysisAssembly.GetType(IArgumentOperationWrapper.WrappedTypeName));

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.OperationLightupGenerator/IAddressOfOperationWrapper.g.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace StyleCop.Analyzers.Lightup
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
99

10-
internal readonly struct IAddressOfOperationWrapper : IOperationWrapper
10+
internal readonly struct IAddressOfOperationWrapper
1111
{
1212
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.Operations.IAddressOfOperation";
1313
private static readonly Type WrappedType;
@@ -27,6 +27,8 @@ private IAddressOfOperationWrapper(IOperation operation)
2727
public IOperation WrappedOperation => this.operation;
2828
public ITypeSymbol Type => this.WrappedOperation.Type;
2929
public IOperation Reference => ReferenceAccessor(this.WrappedOperation);
30+
public static explicit operator IAddressOfOperationWrapper(IOperationWrapper wrapper) => FromOperation(wrapper.WrappedOperation);
31+
public static implicit operator IOperationWrapper(IAddressOfOperationWrapper wrapper) => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
3032
public static IAddressOfOperationWrapper FromOperation(IOperation operation)
3133
{
3234
if (operation == null)

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.OperationLightupGenerator/IAnonymousFunctionOperationWrapper.g.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace StyleCop.Analyzers.Lightup
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
99

10-
internal readonly struct IAnonymousFunctionOperationWrapper : IOperationWrapper
10+
internal readonly struct IAnonymousFunctionOperationWrapper
1111
{
1212
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.Operations.IAnonymousFunctionOperation";
1313
private static readonly Type WrappedType;
@@ -30,6 +30,8 @@ private IAnonymousFunctionOperationWrapper(IOperation operation)
3030
public ITypeSymbol Type => this.WrappedOperation.Type;
3131
public IMethodSymbol Symbol => SymbolAccessor(this.WrappedOperation);
3232
public IBlockOperationWrapper Body => IBlockOperationWrapper.FromOperation(BodyAccessor(this.WrappedOperation));
33+
public static explicit operator IAnonymousFunctionOperationWrapper(IOperationWrapper wrapper) => FromOperation(wrapper.WrappedOperation);
34+
public static implicit operator IOperationWrapper(IAnonymousFunctionOperationWrapper wrapper) => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
3335
public static IAnonymousFunctionOperationWrapper FromOperation(IOperation operation)
3436
{
3537
if (operation == null)

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.OperationLightupGenerator/IAnonymousObjectCreationOperationWrapper.g.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace StyleCop.Analyzers.Lightup
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
99

10-
internal readonly struct IAnonymousObjectCreationOperationWrapper : IOperationWrapper
10+
internal readonly struct IAnonymousObjectCreationOperationWrapper
1111
{
1212
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.Operations.IAnonymousObjectCreationOperation";
1313
private static readonly Type WrappedType;
@@ -27,6 +27,8 @@ private IAnonymousObjectCreationOperationWrapper(IOperation operation)
2727
public IOperation WrappedOperation => this.operation;
2828
public ITypeSymbol Type => this.WrappedOperation.Type;
2929
public ImmutableArray<IOperation> Initializers => InitializersAccessor(this.WrappedOperation);
30+
public static explicit operator IAnonymousObjectCreationOperationWrapper(IOperationWrapper wrapper) => FromOperation(wrapper.WrappedOperation);
31+
public static implicit operator IOperationWrapper(IAnonymousObjectCreationOperationWrapper wrapper) => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
3032
public static IAnonymousObjectCreationOperationWrapper FromOperation(IOperation operation)
3133
{
3234
if (operation == null)

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.OperationLightupGenerator/IArgumentOperationWrapper.g.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace StyleCop.Analyzers.Lightup
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
99

10-
internal readonly struct IArgumentOperationWrapper : IOperationWrapper
10+
internal readonly struct IArgumentOperationWrapper
1111
{
1212
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.Operations.IArgumentOperation";
1313
private static readonly Type WrappedType;
@@ -33,6 +33,8 @@ private IArgumentOperationWrapper(IOperation operation)
3333
public IOperation Value => ValueAccessor(this.WrappedOperation);
3434
public object InConversion => throw new NotImplementedException("Property 'IArgumentOperation.InConversion' has unsupported type 'CommonConversion'");
3535
public object OutConversion => throw new NotImplementedException("Property 'IArgumentOperation.OutConversion' has unsupported type 'CommonConversion'");
36+
public static explicit operator IArgumentOperationWrapper(IOperationWrapper wrapper) => FromOperation(wrapper.WrappedOperation);
37+
public static implicit operator IOperationWrapper(IArgumentOperationWrapper wrapper) => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
3638
public static IArgumentOperationWrapper FromOperation(IOperation operation)
3739
{
3840
if (operation == null)

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.OperationLightupGenerator/IArrayCreationOperationWrapper.g.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace StyleCop.Analyzers.Lightup
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
99

10-
internal readonly struct IArrayCreationOperationWrapper : IOperationWrapper
10+
internal readonly struct IArrayCreationOperationWrapper
1111
{
1212
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.Operations.IArrayCreationOperation";
1313
private static readonly Type WrappedType;
@@ -30,6 +30,8 @@ private IArrayCreationOperationWrapper(IOperation operation)
3030
public ITypeSymbol Type => this.WrappedOperation.Type;
3131
public ImmutableArray<IOperation> DimensionSizes => DimensionSizesAccessor(this.WrappedOperation);
3232
public IArrayInitializerOperationWrapper Initializer => IArrayInitializerOperationWrapper.FromOperation(InitializerAccessor(this.WrappedOperation));
33+
public static explicit operator IArrayCreationOperationWrapper(IOperationWrapper wrapper) => FromOperation(wrapper.WrappedOperation);
34+
public static implicit operator IOperationWrapper(IArrayCreationOperationWrapper wrapper) => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
3335
public static IArrayCreationOperationWrapper FromOperation(IOperation operation)
3436
{
3537
if (operation == null)

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.OperationLightupGenerator/IArrayElementReferenceOperationWrapper.g.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace StyleCop.Analyzers.Lightup
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
99

10-
internal readonly struct IArrayElementReferenceOperationWrapper : IOperationWrapper
10+
internal readonly struct IArrayElementReferenceOperationWrapper
1111
{
1212
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.Operations.IArrayElementReferenceOperation";
1313
private static readonly Type WrappedType;
@@ -30,6 +30,8 @@ private IArrayElementReferenceOperationWrapper(IOperation operation)
3030
public ITypeSymbol Type => this.WrappedOperation.Type;
3131
public IOperation ArrayReference => ArrayReferenceAccessor(this.WrappedOperation);
3232
public ImmutableArray<IOperation> Indices => IndicesAccessor(this.WrappedOperation);
33+
public static explicit operator IArrayElementReferenceOperationWrapper(IOperationWrapper wrapper) => FromOperation(wrapper.WrappedOperation);
34+
public static implicit operator IOperationWrapper(IArrayElementReferenceOperationWrapper wrapper) => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
3335
public static IArrayElementReferenceOperationWrapper FromOperation(IOperation operation)
3436
{
3537
if (operation == null)

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.OperationLightupGenerator/IArrayInitializerOperationWrapper.g.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace StyleCop.Analyzers.Lightup
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
99

10-
internal readonly struct IArrayInitializerOperationWrapper : IOperationWrapper
10+
internal readonly struct IArrayInitializerOperationWrapper
1111
{
1212
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.Operations.IArrayInitializerOperation";
1313
private static readonly Type WrappedType;
@@ -27,6 +27,8 @@ private IArrayInitializerOperationWrapper(IOperation operation)
2727
public IOperation WrappedOperation => this.operation;
2828
public ITypeSymbol Type => this.WrappedOperation.Type;
2929
public ImmutableArray<IOperation> ElementValues => ElementValuesAccessor(this.WrappedOperation);
30+
public static explicit operator IArrayInitializerOperationWrapper(IOperationWrapper wrapper) => FromOperation(wrapper.WrappedOperation);
31+
public static implicit operator IOperationWrapper(IArrayInitializerOperationWrapper wrapper) => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
3032
public static IArrayInitializerOperationWrapper FromOperation(IOperation operation)
3133
{
3234
if (operation == null)

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.OperationLightupGenerator/IAssignmentOperationWrapper.g.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace StyleCop.Analyzers.Lightup
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
99

10-
internal readonly struct IAssignmentOperationWrapper : IOperationWrapper
10+
internal readonly struct IAssignmentOperationWrapper
1111
{
1212
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.Operations.IAssignmentOperation";
1313
private static readonly Type WrappedType;
@@ -30,6 +30,8 @@ private IAssignmentOperationWrapper(IOperation operation)
3030
public ITypeSymbol Type => this.WrappedOperation.Type;
3131
public IOperation Target => TargetAccessor(this.WrappedOperation);
3232
public IOperation Value => ValueAccessor(this.WrappedOperation);
33+
public static explicit operator IAssignmentOperationWrapper(IOperationWrapper wrapper) => FromOperation(wrapper.WrappedOperation);
34+
public static implicit operator IOperationWrapper(IAssignmentOperationWrapper wrapper) => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
3335
public static IAssignmentOperationWrapper FromOperation(IOperation operation)
3436
{
3537
if (operation == null)

StyleCop.Analyzers/StyleCop.Analyzers/Lightup/.generated/StyleCop.Analyzers.CodeGeneration/StyleCop.Analyzers.CodeGeneration.OperationLightupGenerator/IAwaitOperationWrapper.g.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace StyleCop.Analyzers.Lightup
77
using System.Collections.Immutable;
88
using Microsoft.CodeAnalysis;
99

10-
internal readonly struct IAwaitOperationWrapper : IOperationWrapper
10+
internal readonly struct IAwaitOperationWrapper
1111
{
1212
internal const string WrappedTypeName = "Microsoft.CodeAnalysis.Operations.IAwaitOperation";
1313
private static readonly Type WrappedType;
@@ -27,6 +27,8 @@ private IAwaitOperationWrapper(IOperation operation)
2727
public IOperation WrappedOperation => this.operation;
2828
public ITypeSymbol Type => this.WrappedOperation.Type;
2929
public IOperation Operation => OperationAccessor(this.WrappedOperation);
30+
public static explicit operator IAwaitOperationWrapper(IOperationWrapper wrapper) => FromOperation(wrapper.WrappedOperation);
31+
public static implicit operator IOperationWrapper(IAwaitOperationWrapper wrapper) => IOperationWrapper.FromUpcast(wrapper.WrappedOperation);
3032
public static IAwaitOperationWrapper FromOperation(IOperation operation)
3133
{
3234
if (operation == null)

0 commit comments

Comments
 (0)