@@ -70,10 +70,66 @@ private static async Task<Document> ConvertCodeAsync(Document document, Cancella
7070 updatedRoot = RemoveUsingDirectives ( updatedRoot ) ;
7171 UpdateSyntaxTrees ( ref compilation , ref syntaxTree , updatedRoot ) ;
7272
73+ updatedRoot = ConvertTheoryData ( compilation , updatedRoot ) ;
74+ UpdateSyntaxTrees ( ref compilation , ref syntaxTree , updatedRoot ) ;
75+
7376 // Apply all changes in one step
7477 return document . WithSyntaxRoot ( updatedRoot ) ;
7578 }
7679
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+
77133 private static SyntaxNode UpdateInitializeDispose ( Compilation compilation , SyntaxNode root )
78134 {
79135 // Always operate on the latest root
0 commit comments