Skip to content

Commit f0833d2

Browse files
Use record struct
1 parent fccfa11 commit f0833d2

4 files changed

Lines changed: 13 additions & 49 deletions

File tree

CodeConverter/CSharp/AdditionalInitializers.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace ICSharpCode.CodeConverter.CSharp;
66

7+
internal record struct Assignment(ExpressionSyntax Field, SyntaxKind AssignmentKind, ExpressionSyntax Initializer, bool PostAssignment = false);
8+
79
internal class AdditionalInitializers
810
{
911
private readonly bool _shouldAddInstanceConstructor;
@@ -36,7 +38,8 @@ public IReadOnlyCollection<MemberDeclarationSyntax> WithAdditionalInitializers(L
3638
.Where(cds => !cds.Initializer.IsKind(SyntaxKind.ThisConstructorInitializer))
3739
.SplitOn(cds => cds.IsInStaticCsContext());
3840

39-
convertedMembers = WithAdditionalInitializers(convertedMembers, parentTypeName, AdditionalInstanceInitializers, SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)), rootInstanceConstructors, _shouldAddInstanceConstructor, DesignerGeneratedInitializeComponentOrNull != null);
41+
convertedMembers = WithAdditionalInitializers(convertedMembers, parentTypeName, AdditionalInstanceInitializers, SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)),
42+
rootInstanceConstructors, _shouldAddInstanceConstructor, DesignerGeneratedInitializeComponentOrNull != null);
4043

4144
convertedMembers = WithAdditionalInitializers(convertedMembers, parentTypeName,
4245
AdditionalStaticInitializers, SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.StaticKeyword)), rootStaticConstructors, _shouldAddStaticConstructor, false);
@@ -56,10 +59,12 @@ private List<MemberDeclarationSyntax> WithAdditionalInitializers(List<MemberDecl
5659
if (addedConstructorRequiresInitializeComponent) {
5760
statements.Add(SyntaxFactory.ExpressionStatement(SyntaxFactory.InvocationExpression(SyntaxFactory.IdentifierName("InitializeComponent"))));
5861
}
62+
5963
constructors.Add(SyntaxFactory.ConstructorDeclaration(convertIdentifier)
6064
.WithBody(SyntaxFactory.Block(statements.ToArray()))
6165
.WithModifiers(modifiers));
6266
}
67+
6368
foreach (var constructor in constructors) {
6469
var newConstructor = WithAdditionalInitializers(constructor, additionalInitializers);
6570
ReplaceOrInsertBeforeFirstConstructor(convertedMembers, constructor, newConstructor);
@@ -71,12 +76,9 @@ private List<MemberDeclarationSyntax> WithAdditionalInitializers(List<MemberDecl
7176
private static void ReplaceOrInsertBeforeFirstConstructor(List<MemberDeclarationSyntax> convertedMembers, ConstructorDeclarationSyntax constructor, ConstructorDeclarationSyntax newConstructor)
7277
{
7378
int existingIndex = convertedMembers.IndexOf(constructor);
74-
if (existingIndex > -1)
75-
{
79+
if (existingIndex > -1) {
7680
convertedMembers[existingIndex] = newConstructor;
77-
}
78-
else
79-
{
81+
} else {
8082
int constructorIndex = convertedMembers.FindIndex(c => c is ConstructorDeclarationSyntax or MethodDeclarationSyntax);
8183
convertedMembers.Insert(constructorIndex > -1 ? constructorIndex : convertedMembers.Count, newConstructor);
8284
}

CodeConverter/CSharp/Assignment.cs

Lines changed: 0 additions & 38 deletions
This file was deleted.

CodeConverter/CSharp/CommonConversions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public bool ShouldPreferExplicitType(VBSyntax.ExpressionSyntax exp,
134134
if (isField && !declaredSymbol.IsStatic && !SemanticModel.IsDefinitelyStatic(vbName, vbInitValue)) {
135135
if (!_typeContext.Initializers.HasInstanceConstructorsOutsideThisPart) {
136136
var lhs = SyntaxFactory.IdentifierName(ConvertIdentifier(vbName.Identifier, sourceTriviaMapKind: SourceTriviaMapKind.None));
137-
_typeContext.Initializers.AdditionalInstanceInitializers.Add((lhs, CSSyntaxKind.SimpleAssignmentExpression, adjustedInitializerExpr));
137+
_typeContext.Initializers.AdditionalInstanceInitializers.Add(new(lhs, CSSyntaxKind.SimpleAssignmentExpression, adjustedInitializerExpr));
138138
equalsValueClauseSyntax = null;
139139
} else {
140140
var returnBlock = SyntaxFactory.Block(SyntaxFactory.ReturnStatement(adjustedInitializerExpr));

CodeConverter/CSharp/DeclarationNodeVisitor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ private Assignment CreateInitializer((VBSyntax.ModifiedIdentifierSyntax n, VBSyn
274274
var csId = CommonConversions.ConvertIdentifier(f.n.Identifier);
275275
string initializerFunctionName = CommonConversions.GetInitialValueFunctionName(f.n);
276276
var invocation = SyntaxFactory.InvocationExpression(SyntaxFactory.IdentifierName(CommonConversions.CsEscapedIdentifier(initializerFunctionName)), SyntaxFactory.ArgumentList());
277-
return (SyntaxFactory.IdentifierName(csId), CSSyntaxKind.SimpleAssignmentExpression, invocation);
277+
return new(SyntaxFactory.IdentifierName(csId), CSSyntaxKind.SimpleAssignmentExpression, invocation);
278278
}
279279

280280
private MemberDeclarationSyntax[] GetAdditionalDeclarations(VBSyntax.StatementSyntax member)
@@ -554,7 +554,7 @@ private IEnumerable<MemberDeclarationSyntax> CreateWithEventsMembers(SyntaxToken
554554
? initializerState.AdditionalStaticInitializers
555555
: initializerState.AdditionalInstanceInitializers;
556556
foreach (var initializer in initializers) {
557-
initializerCollection.Add((SyntaxFactory.IdentifierName(initializer.Key), CSSyntaxKind.SimpleAssignmentExpression, initializer.Value.Value));
557+
initializerCollection.Add(new(SyntaxFactory.IdentifierName(initializer.Key), CSSyntaxKind.SimpleAssignmentExpression, initializer.Value.Value));
558558
}
559559

560560
var fieldDecls = _typeContext.HandledEventsAnalysis.GetDeclarationsForFieldBackedProperty(fieldDecl,
@@ -614,8 +614,8 @@ private IReadOnlyCollection<MemberDeclarationSyntax> CreateExtraMethodMembers()
614614
// See GetInitialValueFunctionName
615615
var newMethodNames = methodsInfos.ToDictionary(l => l.Id, l => l.Prefix);
616616
for (int i = 0; i < _typeContext.Initializers.AdditionalInstanceInitializers.Count; i++) {
617-
var (a, b, initializer) = _typeContext.Initializers.AdditionalInstanceInitializers[i];
618-
_typeContext.Initializers.AdditionalInstanceInitializers[i] = (a, b, PerScopeState.ReplaceNames(initializer, newMethodNames));
617+
var (a, b, initializer, _) = _typeContext.Initializers.AdditionalInstanceInitializers[i];
618+
_typeContext.Initializers.AdditionalInstanceInitializers[i] = new(a, b, PerScopeState.ReplaceNames(initializer, newMethodNames));
619619
}
620620

621621
return methodsInfos

0 commit comments

Comments
 (0)