55using Microsoft . CodeAnalysis ;
66using Microsoft . CodeAnalysis . CSharp ;
77using Microsoft . CodeAnalysis . CSharp . Syntax ;
8- using ExpressionSyntax = Microsoft . CodeAnalysis . CSharp . Syntax . ExpressionSyntax ;
98
109namespace ICSharpCode . CodeConverter . CSharp
1110{
12- public class AdditionalInitializers
11+ internal class AdditionalInitializers
1312 {
1413 public AdditionalInitializers ( bool shouldAddTypeWideInitToThisPart )
1514 {
1615 ShouldAddTypeWideInitToThisPart = shouldAddTypeWideInitToThisPart ;
1716 }
1817
19- public List < ( ExpressionSyntax Field , SyntaxKind AssignmentKind , ExpressionSyntax Initializer ) > AdditionalStaticInitializers { get ; } = new List < ( ExpressionSyntax , SyntaxKind , ExpressionSyntax ) > ( ) ;
20- public List < ( ExpressionSyntax Field , SyntaxKind AssignmentKind , ExpressionSyntax Initializer ) > AdditionalInstanceInitializers { get ; } = new List < ( ExpressionSyntax , SyntaxKind , ExpressionSyntax ) > ( ) ;
18+ public List < Assignment > AdditionalStaticInitializers { get ; } = new List < Assignment > ( ) ;
19+ public List < Assignment > AdditionalInstanceInitializers { get ; } = new List < Assignment > ( ) ;
2120 public bool ShouldAddTypeWideInitToThisPart { get ; }
2221
2322 public IReadOnlyCollection < MemberDeclarationSyntax > WithAdditionalInitializers ( ITypeSymbol parentType ,
@@ -40,7 +39,7 @@ public IReadOnlyCollection<MemberDeclarationSyntax> WithAdditionalInitializers(I
4039 }
4140
4241 private List < MemberDeclarationSyntax > WithAdditionalInitializers ( List < MemberDeclarationSyntax > convertedMembers ,
43- SyntaxToken convertIdentifier , IReadOnlyCollection < ( ExpressionSyntax Field , SyntaxKind AssignmentKind , ExpressionSyntax Initializer ) > additionalInitializers ,
42+ SyntaxToken convertIdentifier , IReadOnlyCollection < Assignment > additionalInitializers ,
4443 SyntaxTokenList modifiers , IEnumerable < ConstructorDeclarationSyntax > constructorsEnumerable , bool addConstructor , bool addedConstructorRequiresInitializeComponent )
4544 {
4645 if ( ! additionalInitializers . Any ( ) && ( ! addConstructor || ! addedConstructorRequiresInitializeComponent ) ) return convertedMembers ;
@@ -64,17 +63,23 @@ private List<MemberDeclarationSyntax> WithAdditionalInitializers(List<MemberDecl
6463 }
6564
6665 private ConstructorDeclarationSyntax WithAdditionalInitializers ( ConstructorDeclarationSyntax oldConstructor ,
67- IReadOnlyCollection < ( ExpressionSyntax Field , SyntaxKind AssignmentKind , ExpressionSyntax Initializer ) > additionalConstructorAssignments )
66+ IReadOnlyCollection < Assignment > additionalConstructorAssignments )
6867 {
69- var initializerStatements = additionalConstructorAssignments . Select ( assignment =>
70- SyntaxFactory . ExpressionStatement ( SyntaxFactory . AssignmentExpression (
71- assignment . AssignmentKind , assignment . Field , assignment . Initializer ) )
72- ) . ToList ( ) ;
68+ var preInitializerStatements = CreateAssignmentStatement ( additionalConstructorAssignments . Where ( x => ! x . PostAssignment ) ) ;
69+ var postInitializerStatements = CreateAssignmentStatement ( additionalConstructorAssignments . Where ( x => x . PostAssignment ) ) ;
7370 var oldConstructorBody = oldConstructor . Body ?? SyntaxFactory . Block ( SyntaxFactory . ExpressionStatement ( oldConstructor . ExpressionBody . Expression ) ) ;
7471 var newConstructor = oldConstructor . WithBody ( oldConstructorBody . WithStatements (
75- oldConstructorBody . Statements . InsertRange ( 0 , initializerStatements ) ) ) ;
72+ oldConstructorBody . Statements . InsertRange ( 0 , preInitializerStatements ) . AddRange ( postInitializerStatements ) ) ) ;
7673
7774 return newConstructor ;
7875 }
76+
77+ private static List < ExpressionStatementSyntax > CreateAssignmentStatement ( IEnumerable < Assignment > additionalConstructorAssignments )
78+ {
79+ return additionalConstructorAssignments . Select ( assignment =>
80+ SyntaxFactory . ExpressionStatement ( SyntaxFactory . AssignmentExpression (
81+ assignment . AssignmentKind , assignment . Field , assignment . Initializer ) )
82+ ) . ToList ( ) ;
83+ }
7984 }
8085}
0 commit comments