Skip to content

Commit c8bcdbb

Browse files
committed
refactor: don't loop twice over the ienumerable
1 parent e8f4e6f commit c8bcdbb

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

CodeConverter/CSharp/CommonConversions.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -308,16 +308,25 @@ private static string WithDeclarationName(SyntaxToken id, ISymbol idSymbol, stri
308308
{
309309
//This also covers the case when the name is different (in VB you can have method X implements IFoo.Y), but doesn't resolve any resulting name clashes
310310
var assemblyIdentities = assembliesBeingConverted.Select(t => t.Identity);
311+
ISymbol baseSymbol = default;
311312
var containingType = idSymbol.ContainingType;
312-
ISymbol baseSymbol;
313313

314-
if (idSymbol.IsKind(SymbolKind.Method) || idSymbol.IsKind(SymbolKind.Property))
314+
if (idSymbol.IsKind(SymbolKind.Method) || idSymbol.IsKind(SymbolKind.Property))
315315
{
316316
var possibleSymbols = idSymbol.FollowProperty(s => s.BaseMember());
317-
var possibleSymbol = possibleSymbols.LastOrDefault(s => !assemblyIdentities.Contains(s.ContainingAssembly.Identity) && s.ContainingType.Equals(containingType));
318-
baseSymbol = possibleSymbol ?? possibleSymbols.Last();
319-
}
320-
else
317+
foreach (var possibleSymbol in possibleSymbols)
318+
{
319+
if (!assemblyIdentities.Contains(possibleSymbol.ContainingAssembly.Identity) && possibleSymbol.ContainingType.Equals(containingType))
320+
{
321+
baseSymbol = possibleSymbol;
322+
break;
323+
}
324+
325+
baseSymbol = possibleSymbol;
326+
}
327+
328+
}
329+
else
321330
{
322331
baseSymbol = idSymbol;
323332
}

CodeConverter/Shared/SolutionConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public async Task<IAsyncEnumerable<ConversionResult>> Convert()
6666
private async Task<IAsyncEnumerable<ConversionResult>> ConvertProjects()
6767
{
6868
var assemblies = _projectsToConvert.Select(t => t.GetCompilationAsync(_cancellationToken));
69-
var assembliesBeingConverted = (await Task.WhenAll(assemblies)).Select(t => t.Assembly);
69+
var assembliesBeingConverted = (await Task.WhenAll(assemblies)).Select(t => t.Assembly).ToList();
7070
return _projectsToConvert.ToAsyncEnumerable().SelectMany(project => ConvertProject(project, assembliesBeingConverted));
7171
}
7272

0 commit comments

Comments
 (0)