private static async Task RenamePropertyAccordingToTypeName(RefactoringContext context, PropertyDeclarationSyntax propertyDeclaration) { TypeSyntax type = propertyDeclaration.Type; if (type == null) { return; } SyntaxToken identifier = propertyDeclaration.Identifier; if (!context.Span.IsEmptyAndContainedInSpanOrBetweenSpans(identifier)) { return; } SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false); ITypeSymbol typeSymbol = semanticModel.GetTypeSymbol(type, context.CancellationToken); if (typeSymbol?.IsErrorType() != false) { return; } string newName = NameGenerator.CreateName(typeSymbol); if (string.IsNullOrEmpty(newName)) { return; } string oldName = identifier.ValueText; newName = StringUtility.FirstCharToUpper(newName); if (string.Equals(oldName, newName, StringComparison.Ordinal)) { return; } ISymbol symbol = semanticModel.GetDeclaredSymbol(propertyDeclaration, context.CancellationToken); if (!await MemberNameGenerator.IsUniqueMemberNameAsync( newName, symbol, context.Solution, cancellationToken: context.CancellationToken) .ConfigureAwait(false)) { return; } context.RegisterRefactoring( $"Rename '{oldName}' to '{newName}'", cancellationToken => Renamer.RenameSymbolAsync(context.Solution, symbol, newName, default(OptionSet), cancellationToken), RefactoringIdentifiers.RenamePropertyAccordingToTypeName); }
private static async Task RenameMethodAccoringToTypeNameAsync( RefactoringContext context, MethodDeclarationSyntax methodDeclaration) { TypeSyntax returnType = methodDeclaration.ReturnType; if (returnType?.IsVoid() != false) return; SyntaxToken identifier = methodDeclaration.Identifier; if (!context.Span.IsEmptyAndContainedInSpanOrBetweenSpans(identifier)) return; SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false); IMethodSymbol methodSymbol = semanticModel.GetDeclaredSymbol(methodDeclaration, context.CancellationToken); ITypeSymbol typeSymbol = GetType(returnType, semanticModel, context.CancellationToken); if (typeSymbol == null) return; string newName = NameGenerator.CreateName(typeSymbol); if (string.IsNullOrEmpty(newName)) return; newName = "Get" + newName; if (methodSymbol.IsAsync) newName += "Async"; string oldName = identifier.ValueText; if (string.Equals(oldName, newName, StringComparison.Ordinal)) return; if (!await MemberNameGenerator.IsUniqueMemberNameAsync( newName, methodSymbol, context.Solution, cancellationToken: context.CancellationToken).ConfigureAwait(false)) { return; } context.RegisterRefactoring( $"Rename '{oldName}' to '{newName}'", cancellationToken => Renamer.RenameSymbolAsync(context.Solution, methodSymbol, newName, default(OptionSet), cancellationToken), RefactoringIdentifiers.RenameMethodAccordingToTypeName); }
private static async Task SyncPropertyNameAndBackingFieldNameAsync( RefactoringContext context, IdentifierNameSyntax identifierName) { if (IsQualified(identifierName) && !IsQualifiedWithThis(identifierName)) { return; } PropertyDeclarationSyntax propertyDeclaration = identifierName.FirstAncestor <PropertyDeclarationSyntax>(); if (propertyDeclaration == null) { return; } SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false); var fieldSymbol = semanticModel.GetSymbol(identifierName, context.CancellationToken) as IFieldSymbol; if (fieldSymbol?.DeclaredAccessibility != Accessibility.Private) { return; } IPropertySymbol propertySymbol = semanticModel.GetDeclaredSymbol(propertyDeclaration, context.CancellationToken); if (propertySymbol == null) { return; } if (fieldSymbol.IsStatic != propertySymbol.IsStatic) { return; } if (!SymbolEqualityComparer.Default.Equals(fieldSymbol.ContainingType, propertySymbol.ContainingType)) { return; } string newName = StringUtility.ToCamelCase(propertySymbol.Name, context.PrefixFieldIdentifierWithUnderscore); if (string.Equals(fieldSymbol.Name, newName, StringComparison.Ordinal)) { return; } if (!await MemberNameGenerator.IsUniqueMemberNameAsync( newName, fieldSymbol, context.Solution, cancellationToken: context.CancellationToken) .ConfigureAwait(false)) { return; } context.RegisterRefactoring( $"Rename '{fieldSymbol.Name}' to '{newName}'", ct => Renamer.RenameSymbolAsync(context.Solution, fieldSymbol, newName, default(OptionSet), ct), RefactoringDescriptors.SyncPropertyNameAndBackingFieldName); }