public static async Task <Document> RefactorAsync( Document document, LockStatementSyntax lockStatement, CancellationToken cancellationToken = default(CancellationToken)) { if (document == null) { throw new ArgumentNullException(nameof(document)); } if (lockStatement == null) { throw new ArgumentNullException(nameof(lockStatement)); } MemberDeclarationSyntax containingMember = lockStatement.FirstAncestorOrSelf <MemberDeclarationSyntax>(); if (containingMember != null) { var containingDeclaration = (MemberDeclarationSyntax)containingMember .Ancestors() .FirstOrDefault(f => f.IsKind( SyntaxKind.ClassDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.StructDeclaration)); if (containingDeclaration != null) { SyntaxList <MemberDeclarationSyntax> members = containingDeclaration.GetMembers(); int index = members.IndexOf(containingMember); SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); string name = Identifier.EnsureUniqueMemberName(LockObjectName, lockStatement.Expression.SpanStart, semanticModel, cancellationToken); LockStatementSyntax newLockStatement = lockStatement .WithExpression(IdentifierName(Identifier(name).WithRenameAnnotation())); MemberDeclarationSyntax newContainingMember = containingMember .ReplaceNode(lockStatement, newLockStatement); bool isStatic = containingMember.GetModifiers().Contains(SyntaxKind.StaticKeyword); FieldDeclarationSyntax field = CreateFieldDeclaration(name, isStatic).WithFormatterAnnotation(); SyntaxList <MemberDeclarationSyntax> newMembers = members.ReplaceAt(index, newContainingMember); newMembers = Inserter.InsertMember(newMembers, field); MemberDeclarationSyntax newNode = containingDeclaration.SetMembers(newMembers); return(await document.ReplaceNodeAsync(containingDeclaration, newNode, cancellationToken).ConfigureAwait(false)); } } return(document); }
public static async Task <Document> RefactorAsync( Document document, PropertyDeclarationSyntax propertyDeclaration, bool prefixIdentifierWithUnderscore = true, CancellationToken cancellationToken = default(CancellationToken)) { string fieldName = Identifier.ToCamelCase( propertyDeclaration.Identifier.ValueText, prefixWithUnderscore: prefixIdentifierWithUnderscore); SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); fieldName = Identifier.EnsureUniqueMemberName(fieldName, propertyDeclaration.SpanStart, semanticModel, cancellationToken); FieldDeclarationSyntax fieldDeclaration = CreateBackingField(propertyDeclaration, fieldName) .WithFormatterAnnotation(); PropertyDeclarationSyntax newPropertyDeclaration = ExpandPropertyAndAddBackingField(propertyDeclaration, fieldName); newPropertyDeclaration = ExpandPropertyRefactoring.ReplaceAbstractWithVirtual(newPropertyDeclaration); newPropertyDeclaration = newPropertyDeclaration .WithTriviaFrom(propertyDeclaration) .WithFormatterAnnotation(); var parentMember = (MemberDeclarationSyntax)propertyDeclaration.Parent; SyntaxList <MemberDeclarationSyntax> members = parentMember.GetMembers(); int propertyIndex = members.IndexOf(propertyDeclaration); if (IsReadOnlyAutoProperty(propertyDeclaration)) { IPropertySymbol propertySymbol = semanticModel.GetDeclaredSymbol(propertyDeclaration, cancellationToken); ImmutableArray <SyntaxNode> oldNodes = await document.FindSymbolNodesAsync(propertySymbol, cancellationToken).ConfigureAwait(false); IdentifierNameSyntax newNode = IdentifierName(fieldName); MemberDeclarationSyntax newParentMember = parentMember.ReplaceNodes(oldNodes, (f, g) => newNode.WithTriviaFrom(f)); members = newParentMember.GetMembers(); } SyntaxList <MemberDeclarationSyntax> newMembers = members.ReplaceAt(propertyIndex, newPropertyDeclaration); newMembers = Inserter.InsertMember(newMembers, fieldDeclaration); return(await document.ReplaceNodeAsync(parentMember, parentMember.SetMembers(newMembers), cancellationToken).ConfigureAwait(false)); }
private static async Task <Document> RefactorAsync( Document document, MemberDeclarationSyntax declaration, List <MemberDeclarationSyntax> assignableMembers, CancellationToken cancellationToken = default(CancellationToken)) { MemberDeclarationSyntax parentMember = GetContainingMember(declaration); SyntaxList <MemberDeclarationSyntax> members = parentMember.GetMembers(); SyntaxList <MemberDeclarationSyntax> newMembers = Inserter.InsertMember( members, CreateConstructor(GetConstructorIdentifierText(parentMember), assignableMembers)); MemberDeclarationSyntax newNode = parentMember.SetMembers(newMembers) .WithFormatterAnnotation(); return(await document.ReplaceNodeAsync(parentMember, newNode, cancellationToken).ConfigureAwait(false)); }
public static Task <Document> RefactorAsync( Document document, EventFieldDeclarationSyntax eventFieldDeclaration, IEventSymbol eventSymbol, ITypeSymbol eventArgsSymbol, bool supportsCSharp6, CancellationToken cancellationToken = default(CancellationToken)) { var containingMember = (MemberDeclarationSyntax)eventFieldDeclaration.Parent; SyntaxList <MemberDeclarationSyntax> members = containingMember.GetMembers(); MethodDeclarationSyntax method = CreateOnEventMethod(eventSymbol, eventArgsSymbol, supportsCSharp6) .WithFormatterAnnotation(); SyntaxList <MemberDeclarationSyntax> newMembers = Inserter.InsertMember(members, method); return(document.ReplaceNodeAsync(containingMember, containingMember.SetMembers(newMembers), cancellationToken)); }
private static Task <Document> RefactorAsync( Document document, StructDeclarationSyntax structDeclaration, INamedTypeSymbol typeSymbol, INamedTypeSymbol equatableSymbol, SemanticModel semanticModel, CancellationToken cancellationToken) { int position = structDeclaration.SpanStart; SimpleBaseTypeSyntax baseType = SimpleBaseType(equatableSymbol.ToMinimalTypeSyntax(semanticModel, position)); StructDeclarationSyntax newNode = AddBaseType(structDeclaration, baseType); TypeSyntax classType = typeSymbol.ToMinimalTypeSyntax(semanticModel, position); newNode = Inserter.InsertMember(newNode, CreateEqualsMethod(classType, semanticModel, position)); return(document.ReplaceNodeAsync(structDeclaration, newNode, cancellationToken)); }