@@ -70,10 +70,66 @@ private static async Task<Document> ConvertCodeAsync(Document document, Cancella
70
70
updatedRoot = RemoveUsingDirectives ( updatedRoot ) ;
71
71
UpdateSyntaxTrees ( ref compilation , ref syntaxTree , updatedRoot ) ;
72
72
73
+ updatedRoot = ConvertTheoryData ( compilation , updatedRoot ) ;
74
+ UpdateSyntaxTrees ( ref compilation , ref syntaxTree , updatedRoot ) ;
75
+
73
76
// Apply all changes in one step
74
77
return document . WithSyntaxRoot ( updatedRoot ) ;
75
78
}
76
79
80
+ private static SyntaxNode ConvertTheoryData ( Compilation compilation , SyntaxNode root )
81
+ {
82
+ var currentRoot = root ;
83
+ foreach ( var objectCreationExpressionSyntax in currentRoot . DescendantNodes ( ) . OfType < BaseObjectCreationExpressionSyntax > ( ) )
84
+ {
85
+ var type = objectCreationExpressionSyntax switch
86
+ {
87
+ ObjectCreationExpressionSyntax explicitObjectCreationExpressionSyntax => explicitObjectCreationExpressionSyntax . Type ,
88
+ ImplicitObjectCreationExpressionSyntax implicitObjectCreationExpressionSyntax => SyntaxFactory . ParseTypeName ( compilation . GetSemanticModel ( implicitObjectCreationExpressionSyntax . SyntaxTree ) . GetTypeInfo ( implicitObjectCreationExpressionSyntax ) . Type ! . ToDisplayString ( ) ) ,
89
+ _ => null
90
+ } ;
91
+
92
+ if ( type is not GenericNameSyntax genericNameSyntax ||
93
+ genericNameSyntax . Identifier . Text != "TheoryData" )
94
+ {
95
+ continue ;
96
+ }
97
+
98
+ var collectionItems = objectCreationExpressionSyntax . Initializer !
99
+ . ChildNodes ( )
100
+ . Select ( x => x . DescendantNodesAndSelf ( ) . OfType < ExpressionSyntax > ( ) . First ( ) ) ;
101
+
102
+ var arrayCreationExpressionSyntax = SyntaxFactory . ArrayCreationExpression (
103
+ SyntaxFactory . ArrayType ( genericNameSyntax . TypeArgumentList . Arguments [ 0 ] ,
104
+ SyntaxFactory . SingletonList (
105
+ SyntaxFactory . ArrayRankSpecifier (
106
+ SyntaxFactory . SingletonSeparatedList < ExpressionSyntax > (
107
+ SyntaxFactory . OmittedArraySizeExpression ( )
108
+ )
109
+ )
110
+ )
111
+ ) ,
112
+ SyntaxFactory . InitializerExpression (
113
+ SyntaxKind . ArrayInitializerExpression ,
114
+ SyntaxFactory . SeparatedList ( collectionItems )
115
+ )
116
+ ) . NormalizeWhitespace ( ) ;
117
+
118
+ currentRoot = currentRoot . ReplaceNode ( objectCreationExpressionSyntax , arrayCreationExpressionSyntax ) ;
119
+ }
120
+
121
+ foreach ( var genericTheoryDataTypeSyntax in currentRoot . DescendantNodes ( ) . OfType < GenericNameSyntax > ( ) . Where ( x => x . Identifier . Text == "TheoryData" ) )
122
+ {
123
+ var enumerableTypeSyntax = SyntaxFactory . GenericName (
124
+ SyntaxFactory . Identifier ( "IEnumerable" ) ,
125
+ SyntaxFactory . TypeArgumentList ( SyntaxFactory . SeparatedList ( genericTheoryDataTypeSyntax . TypeArgumentList . Arguments ) ) ) ;
126
+
127
+ currentRoot = currentRoot . ReplaceNode ( genericTheoryDataTypeSyntax , enumerableTypeSyntax ) ;
128
+ }
129
+
130
+ return currentRoot . NormalizeWhitespace ( ) ;
131
+ }
132
+
77
133
private static SyntaxNode UpdateInitializeDispose ( Compilation compilation , SyntaxNode root )
78
134
{
79
135
// Always operate on the latest root
0 commit comments