Skip to content

Commit fe8a2f6

Browse files
Pure refactor
1 parent c63c699 commit fe8a2f6

2 files changed

Lines changed: 23 additions & 17 deletions

File tree

CodeConverter/CSharp/MethodWithHandles.cs

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,24 @@ public MethodWithHandles(SyntaxGenerator csSyntaxGenerator,
3535
public static IEnumerable<MemberDeclarationSyntax> GetDeclarationsForFieldBackedProperty(
3636
VariableDeclarationSyntax decl, SyntaxTokenList convertedModifiers,
3737
SyntaxList<AttributeListSyntax> attributes,
38-
List<MethodWithHandles> methodsWithHandles)
38+
IReadOnlyCollection<MethodWithHandles> methodsWithHandles)
3939
{
4040
// It should be safe to use the underscore name since in VB the compiler generates a backing field with that name, and errors if you try to clash with it
41-
var propertyToBackingFieldMapping = decl.Variables.Select(v => v.Identifier.Text)
42-
.ToDictionary(n => n, n => SyntaxFactory.Identifier("_" + n));
43-
var fieldDecl = decl.WithVariables(SyntaxFactory.SeparatedList(decl.Variables.Select(v =>
44-
v.WithIdentifier(propertyToBackingFieldMapping[v.Identifier.Text])
45-
)));
41+
var variablesToMap = decl.Variables
42+
.Select(v => (Variable: v, HasEvents: true, NewId: SyntaxFactory.Identifier("_" + v.Identifier.Text))).ToArray();
43+
var fieldDecl = decl.WithVariables(SyntaxFactory.SeparatedList(
44+
variablesToMap.Select(m => m.Variable.WithIdentifier(m.NewId))
45+
));
4646
var fieldModifiers = SyntaxFactory.TokenList(new[] {SyntaxFactory.Token(SyntaxKind.PrivateKeyword)}.Concat(convertedModifiers.Where(m => !m.IsCsVisibility(false, false))));
4747
yield return SyntaxFactory.FieldDeclaration(attributes, fieldModifiers, fieldDecl);
48-
foreach (var variable in decl.Variables) {
48+
foreach (var mapping in variablesToMap) {
4949
yield return GetDeclarationsForFieldBackedProperty(methodsWithHandles, attributes, convertedModifiers,
50-
decl.Type, variable.Identifier,
51-
propertyToBackingFieldMapping[variable.Identifier.Text]);
50+
decl.Type, mapping.Variable.Identifier,
51+
mapping.NewId);
5252
}
5353
}
5454

55-
private static PropertyDeclarationSyntax GetDeclarationsForFieldBackedProperty(List<MethodWithHandles> methods,
55+
private static PropertyDeclarationSyntax GetDeclarationsForFieldBackedProperty(IReadOnlyCollection<MethodWithHandles> methods,
5656
SyntaxList<AttributeListSyntax> attributes, SyntaxTokenList convertedModifiers, TypeSyntax typeSyntax,
5757
SyntaxToken propertyIdentifier, SyntaxToken fieldIdentifier)
5858
{
@@ -75,7 +75,7 @@ private static PropertyDeclarationSyntax GetDeclarationsForFieldBackedProperty(L
7575

7676
private static StatementSyntax[] CreateSetterBlockToUpdateHandles(string propertyIdentifier,
7777
IdentifierNameSyntax fieldIdSyntax,
78-
List<MethodWithHandles> methods)
78+
IReadOnlyCollection<MethodWithHandles> methods)
7979
{
8080
var assignBackingField = SyntaxFactory.ExpressionStatement(SyntaxFactory.AssignmentExpression(
8181
SyntaxKind.SimpleAssignmentExpression, fieldIdSyntax,
@@ -91,9 +91,9 @@ private static StatementSyntax[] CreateSetterBlockToUpdateHandles(string propert
9191
};
9292
}
9393

94-
public static IEnumerable<StatementSyntax> CreateHandlesUpdaters(string propertyIdentifier,
94+
private static IEnumerable<StatementSyntax> CreateHandlesUpdaters(string propertyIdentifier,
9595
IdentifierNameSyntax fieldIdSyntax,
96-
List<MethodWithHandles> handlesSpecs,
96+
IReadOnlyCollection<MethodWithHandles> handlesSpecs,
9797
SyntaxKind assignmentExpressionKind)
9898
{
9999
return handlesSpecs.SelectMany(hs => hs.CreateHandlesUpdater(propertyIdentifier, fieldIdSyntax, assignmentExpressionKind));
@@ -108,11 +108,16 @@ public IEnumerable<StatementSyntax> GetPostInitializationStatements(string prope
108108
private IEnumerable<StatementSyntax> CreateHandlesUpdater(string propertyIdentifier,
109109
IdentifierNameSyntax fieldIdSyntax, SyntaxKind assignmentExpressionKind, bool requiresNewDelegate = false)
110110
{
111-
return HandledPropertyEventCSharpIds
112-
.Where(h => h.EventContainerName.Text == propertyIdentifier)
111+
return GetPropertyEvents(propertyIdentifier)
113112
.Select(e => CreateHandlesUpdater(fieldIdSyntax, e, assignmentExpressionKind, requiresNewDelegate));
114113
}
115114

115+
private IEnumerable<(SyntaxToken EventContainerName, SyntaxToken EventSymbolName, IEventSymbol Event, int ParametersToDiscard)> GetPropertyEvents(string propertyIdentifier)
116+
{
117+
return HandledPropertyEventCSharpIds
118+
.Where(h => h.EventContainerName.Text == propertyIdentifier);
119+
}
120+
116121
/// <summary>Use instead of <see cref="GetConstructorEventHandlers"/> for DesignerGenerated classes: https://github.com/icsharpcode/CodeConverter/issues/550</summary>
117122
public IEnumerable<StatementSyntax> GetInitializeComponentClassEventHandlers()
118123
{

CodeConverter/CSharp/MethodsWithHandles.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using ICSharpCode.CodeConverter.Util;
45
using Microsoft.CodeAnalysis;
56
using Microsoft.CodeAnalysis.CSharp;
67
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -35,9 +36,9 @@ public bool Any()
3536
return _methodWithHandleses.Any();
3637
}
3738

38-
public IEnumerable<MemberDeclarationSyntax> GetDeclarationsForFieldBackedProperty(VariableDeclarationSyntax fieldDecl, SyntaxTokenList convertedModifiers, SyntaxList<AttributeListSyntax> list)
39+
public IEnumerable<MemberDeclarationSyntax> GetDeclarationsForFieldBackedProperty(VariableDeclarationSyntax fieldDecl, SyntaxTokenList convertedModifiers, SyntaxList<AttributeListSyntax> attributes)
3940
{
40-
return MethodWithHandles.GetDeclarationsForFieldBackedProperty(fieldDecl, convertedModifiers, list,
41+
return MethodWithHandles.GetDeclarationsForFieldBackedProperty(fieldDecl, convertedModifiers, attributes,
4142
_methodWithHandleses);
4243
}
4344

0 commit comments

Comments
 (0)