@@ -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}
0 commit comments