internal static bool AssignsValueToBackingField(AccessorDeclarationSyntax setter, out AssignmentExpressionSyntax assignment) { using (var pooled = AssignmentWalker.Create(setter)) { foreach (var a in pooled.Item.Assignments) { if ((a.Right as IdentifierNameSyntax)?.Identifier.ValueText != "value") { continue; } if (a.Left is IdentifierNameSyntax) { assignment = a; return(true); } var memberAccess = a.Left as MemberAccessExpressionSyntax; if (memberAccess?.Expression is ThisExpressionSyntax && memberAccess.Name is IdentifierNameSyntax) { assignment = a; return(true); } } } assignment = null; return(false); }
internal static bool TryGetBackingField(PropertyDeclarationSyntax property, out IdentifierNameSyntax field, out FieldDeclarationSyntax fieldDeclaration) { field = null; fieldDeclaration = null; if (property == null) { return(false); } AccessorDeclarationSyntax setter; if (property.TryGetSetAccessorDeclaration(out setter) && setter.Body != null) { using (var pooled = AssignmentWalker.Create(setter)) { if (pooled.Item.Assignments.Count != 1) { return(false); } var left = pooled.Item.Assignments[0].Left; field = left as IdentifierNameSyntax; if (field == null) { var memberAccess = left as MemberAccessExpressionSyntax; if (!(memberAccess?.Expression is ThisExpressionSyntax)) { return(false); } field = memberAccess.Name as IdentifierNameSyntax; } if (field == null) { return(false); } foreach (var member in property.FirstAncestorOrSelf <TypeDeclarationSyntax>().Members) { fieldDeclaration = member as FieldDeclarationSyntax; if (fieldDeclaration != null) { foreach (var variable in fieldDeclaration.Declaration.Variables) { if (variable.Identifier.ValueText == field.Identifier.ValueText) { return(true); } } } } } } return(false); }