Skip to content

Commit 29714cd

Browse files
committed
refactor(mocking): address the relevant code-quality review comments
Applied: combined the nested if in ViewModelGenTool_3.Mocking, projected ctor.DeclaringSyntaxReferences, SimpleNameSyntax and the accesses with Select, and filtered the nested types and the references explicitly in FeedsMockGenerator. Declined, each answered in its thread: the readonly suggestion on Disposable._onDispose is a false positive (the field is a ref argument of Interlocked.Exchange), the == false simplification targets a bool? whose three-state semantics are intentional, and the Where suggestion filters a computed value.
1 parent ba05821 commit 29714cd

2 files changed

Lines changed: 22 additions & 24 deletions

File tree

src/Uno.Extensions.Reactive.Generator/Bindables/ViewModelGenTool_3.Mocking.cs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,8 @@ private Dictionary<string, string> BuildFieldToParamMap(INamedTypeSymbol model,
163163

164164
foreach (var ctor in AccessibleInstanceCtors(model))
165165
{
166-
foreach (var syntaxRef in ctor.DeclaringSyntaxReferences)
166+
foreach (var node in ctor.DeclaringSyntaxReferences.Select(syntaxRef => syntaxRef.GetSyntax()))
167167
{
168-
var node = syntaxRef.GetSyntax();
169168
var body = (SyntaxNode?)(node as ConstructorDeclarationSyntax)?.Body
170169
?? (node as ConstructorDeclarationSyntax)?.ExpressionBody?.Expression;
171170
if (body is null)
@@ -225,9 +224,11 @@ private Dictionary<string, string> BuildFieldToParamMap(INamedTypeSymbol model,
225224
foreach (var body in GetMemberBodies(member, compilation, out var semanticModelByTree))
226225
{
227226
var semanticModel = semanticModelByTree(body.SyntaxTree);
228-
foreach (var id in body.DescendantNodesAndSelf().OfType<SimpleNameSyntax>())
227+
foreach (var symbol in body
228+
.DescendantNodesAndSelf()
229+
.OfType<SimpleNameSyntax>()
230+
.Select(id => semanticModel.GetSymbolInfo(id).Symbol))
229231
{
230-
var symbol = semanticModel.GetSymbolInfo(id).Symbol;
231232
if (symbol is null)
232233
{
233234
continue;
@@ -265,12 +266,10 @@ private Dictionary<string, string> BuildFieldToParamMap(INamedTypeSymbol model,
265266
};
266267
if (backingName is not null
267268
&& SymbolEqualityComparer.Default.Equals(symbol.ContainingType, model)
268-
&& fieldToParam.TryGetValue(backingName, out var paramName))
269+
&& fieldToParam.TryGetValue(backingName, out var paramName)
270+
&& seenServices.Add(paramName))
269271
{
270-
if (seenServices.Add(paramName))
271-
{
272-
services.Add(paramName);
273-
}
272+
services.Add(paramName);
274273
}
275274
}
276275
}
@@ -354,9 +353,8 @@ void Mark(string param, string? member)
354353

355354
foreach (var ctor in AccessibleInstanceCtors(model))
356355
{
357-
foreach (var syntaxRef in ctor.DeclaringSyntaxReferences)
356+
foreach (var node in ctor.DeclaringSyntaxReferences.Select(syntaxRef => syntaxRef.GetSyntax()))
358357
{
359-
var node = syntaxRef.GetSyntax();
360358
var body = (SyntaxNode?)(node as ConstructorDeclarationSyntax)?.Body
361359
?? (node as ConstructorDeclarationSyntax)?.ExpressionBody?.Expression;
362360
if (body is null)
@@ -374,15 +372,18 @@ void Mark(string param, string? member)
374372

375373
private void InspectEager(SyntaxNode body, SemanticModel semanticModel, HashSet<string> ctorParamNames, Action<string, string?> mark, string? enclosingMember)
376374
{
377-
foreach (var access in body.DescendantNodesAndSelf())
378-
{
379-
// The receiver of a member-access / element-access is an eager dereference.
380-
ExpressionSyntax? receiver = access switch
375+
// The receiver of a member-access / element-access is an eager dereference.
376+
var receivers = body
377+
.DescendantNodesAndSelf()
378+
.Select(access => access switch
381379
{
382380
MemberAccessExpressionSyntax mae => mae.Expression,
383381
ElementAccessExpressionSyntax eae => eae.Expression,
384-
_ => null,
385-
};
382+
_ => (ExpressionSyntax?)null,
383+
});
384+
385+
foreach (var receiver in receivers)
386+
{
386387
if (receiver is not IdentifierNameSyntax id)
387388
{
388389
continue;

src/Uno.HotTesting.Reactive.Generator/FeedsMockGenerator.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,19 @@ IEnumerable<INamedTypeSymbol> Walk(INamespaceOrTypeSymbol ns)
6060
else if (member is INamedTypeSymbol type)
6161
{
6262
if (HasFeedDep(type)) yield return type;
63-
foreach (var nested in type.GetTypeMembers())
63+
foreach (var nested in type.GetTypeMembers().Where(HasFeedDep))
6464
{
65-
if (HasFeedDep(nested)) yield return nested;
65+
yield return nested;
6666
}
6767
}
6868
}
6969
}
7070

7171
foreach (var t in Walk(compilation.Assembly.GlobalNamespace)) yield return t;
7272

73-
foreach (var reference in compilation.References)
73+
foreach (var asm in compilation.References.Select(compilation.GetAssemblyOrModuleSymbol).OfType<IAssemblySymbol>())
7474
{
75-
if (compilation.GetAssemblyOrModuleSymbol(reference) is IAssemblySymbol asm)
76-
{
77-
foreach (var t in Walk(asm.GlobalNamespace)) yield return t;
78-
}
75+
foreach (var t in Walk(asm.GlobalNamespace)) yield return t;
7976
}
8077
}
8178

0 commit comments

Comments
 (0)