Skip to content

Commit 10b1b83

Browse files
Report renaming difficulties
1 parent 6eefcfb commit 10b1b83

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed

CodeConverter/CSharp/ProjectMergedDeclarationExtensions.cs

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -157,30 +157,41 @@ private static string Renamespace(this string sourceText)
157157
.Replace("Namespace My", $"Namespace {Constants.MergedMyNamespace}");
158158
}
159159

160-
public static async Task<Project> RenameMergedNamespacesAsync(this Project project, CancellationToken cancellationToken)
160+
public static async Task<Project> RenameMergedNamespacesAsync(this Project project, IProgress<ConversionProgress> progress, CancellationToken cancellationToken)
161161
{
162-
project = await RenamePrefixAsync(project, Constants.MergedMyNamespace, "My", SymbolFilter.Namespace, cancellationToken);
163-
project = await RenamePrefixAsync(project, Constants.MergedMsVbNamespace, "VisualBasic", SymbolFilter.Namespace, cancellationToken);
164-
project = await RenamePrefixAsync(project, Constants.MergedMyMemberPrefix, "", SymbolFilter.Member, cancellationToken);
162+
project = await RenamePrefixAsync(project, Constants.MergedMyNamespace, "My", SymbolFilter.Namespace, progress, cancellationToken);
163+
project = await RenamePrefixAsync(project, Constants.MergedMsVbNamespace, "VisualBasic", SymbolFilter.Namespace, progress, cancellationToken);
164+
project = await RenamePrefixAsync(project, Constants.MergedMyMemberPrefix, "", SymbolFilter.Member, progress, cancellationToken);
165165
return project;
166166
}
167167

168-
private static async Task<Project> RenamePrefixAsync(Project project, string oldNamePrefix, string newNamePrefix, SymbolFilter symbolFilter, CancellationToken cancellationToken)
168+
private static async Task<Project> RenamePrefixAsync(Project project, string oldNamePrefix,
169+
string newNamePrefix, SymbolFilter symbolFilter, IProgress<ConversionProgress> progress,
170+
CancellationToken cancellationToken)
169171
{
170-
for (var symbolToRename = await GetFirstSymbolStartingWithAsync(project, oldNamePrefix, symbolFilter, cancellationToken);
171-
symbolToRename != null;
172-
symbolToRename = await GetFirstSymbolStartingWithAsync(project, oldNamePrefix, symbolFilter, cancellationToken))
173-
{
174-
var renamedSolution = await Renamer.RenameSymbolAsync(project.Solution, symbolToRename, symbolToRename.Name.Replace(oldNamePrefix, newNamePrefix), default(OptionSet), cancellationToken);
175-
project = renamedSolution.GetProject(project.Id);
172+
int toSkip = 0;
173+
for (var symbolToRename = await GetElementToRename(project); symbolToRename != null; symbolToRename = await GetElementToRename(project, toSkip)) {
174+
string newName = symbolToRename.Name.Replace(oldNamePrefix, newNamePrefix);
175+
try {
176+
var renamedSolution = await Renamer.RenameSymbolAsync(project.Solution, symbolToRename, newName, default(OptionSet), cancellationToken);
177+
project = renamedSolution.GetProject(project.Id);
178+
} catch (Exception e) {
179+
toSkip++;
180+
progress.Report(new ConversionProgress($"ERROR: Failed to rename {symbolToRename} to {newName}, please do so manually. Exception details:\r\n{e}"));
181+
}
176182
}
177183
return project;
184+
185+
async Task<ISymbol> GetElementToRename(Project lProject, int lToSkip = 0)
186+
{
187+
return (await GetSymbolStartingWithAsync(lProject, oldNamePrefix, symbolFilter, cancellationToken)).ElementAtOrDefault(lToSkip);
188+
}
178189
}
179190

180-
private static async Task<ISymbol> GetFirstSymbolStartingWithAsync(Project project, string symbolPrefix, SymbolFilter symbolFilter, CancellationToken cancellationToken)
191+
private static async Task<IEnumerable<ISymbol>> GetSymbolStartingWithAsync(Project project, string symbolPrefix, SymbolFilter symbolFilter, CancellationToken cancellationToken)
181192
{
182193
var compilation = await project.GetCompilationAsync(cancellationToken);
183-
return compilation.GetSymbolsWithName(s => s.StartsWith(symbolPrefix), symbolFilter).FirstOrDefault();
194+
return compilation.GetSymbolsWithName(s => s.StartsWith(symbolPrefix), symbolFilter);
184195
}
185196
}
186197
}

CodeConverter/CSharp/VBToCSProjectContentsConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public async Task<SyntaxNode> SingleFirstPassAsync(Document document)
7272
{
7373
var projDirPath = SourceProject.GetDirectoryPath();
7474
var (project, docIds) = _convertedCsProject.WithDocuments(firstPassResults.Select(r => r.WithTargetPath(GetTargetPath(projDirPath, r))).ToArray());
75-
if (_useProjectLevelWinformsAdjustments) project = await project.RenameMergedNamespacesAsync(_cancellationToken);
75+
if (_useProjectLevelWinformsAdjustments) project = await project.RenameMergedNamespacesAsync(_progress, _cancellationToken);
7676
return (project, docIds);
7777
}
7878

0 commit comments

Comments
 (0)