public override void VisitPropertyDeclaration(PropertyDeclarationSyntax node) { base.VisitPropertyDeclaration(node); var type = treeContext.Model.GetTypeInfo(node.Type).Type as INamedTypeSymbol; if (type?.ConstructedFrom == treeContext.Context.UnboundValueArrayType) { if (node.IsAutoProperty()) { var symbol = treeContext.Model.GetDeclaredSymbol(node); targetFoundAction(symbol, type); } } }
public override SyntaxNode VisitPropertyDeclaration(PropertyDeclarationSyntax node) { node = (PropertyDeclarationSyntax)base.VisitPropertyDeclaration(node); var newNode = node; if (node.ExpressionBody != null) { newNode = SyntaxHelper.ToStatementBody(node); } if (node.IsAutoProperty() && node.AccessorList != null) { var setter = node.AccessorList.Accessors.SingleOrDefault(a => a.Keyword.Kind() == SyntaxKind.SetKeyword); if (setter == null) { var getter = node.AccessorList.Accessors.Single(a => a.Keyword.Kind() == SyntaxKind.GetKeyword); setter = SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration) .WithModifiers(SyntaxTokenList.Create(SyntaxFactory.Token(SyntaxKind.PrivateKeyword).WithTrailingTrivia(SyntaxFactory.Space))) .WithBody(null) .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)) .WithLeadingTrivia(getter.GetLeadingTrivia()) .WithTrailingTrivia(getter.GetTrailingTrivia()); newNode = newNode.AddAccessorListAccessors(setter); } if (newNode.Initializer != null) { var modifiers = SyntaxTokenList.Create(SyntaxFactory.Token(SyntaxKind.PrivateKeyword).WithTrailingTrivia(SyntaxFactory.Space)); if (node.Modifiers.Any(m => m.Kind() == SyntaxKind.StaticKeyword)) { modifiers = modifiers.Add(SyntaxFactory.Token(SyntaxKind.StaticKeyword).WithTrailingTrivia(SyntaxFactory.Space)); } var field = SyntaxFactory.FieldDeclaration(SyntaxFactory.List <AttributeListSyntax>(), modifiers, SyntaxFactory.VariableDeclaration( node.Type, SyntaxFactory.SeparatedList(new[] { SyntaxFactory.VariableDeclarator( SyntaxFactory.Identifier(AutoInitFieldPrefix + node.Identifier.Text), null, newNode.Initializer ) }) ), SyntaxFactory.Token(SyntaxKind.SemicolonToken) ); field = field.WithLeadingTrivia(node.GetLeadingTrivia()).WithTrailingTrivia(node.GetTrailingTrivia()); fields.Add(field); newNode = newNode.ReplaceNode(newNode.Initializer, (SyntaxNode)null); newNode = SyntaxHelper.RemoveSemicolon(newNode, newNode.SemicolonToken, t => newNode.WithSemicolonToken(t)); } return(newNode); } return(newNode.Equals(node) ? node : newNode); }
public static bool IsProperty(this PropertyDeclarationSyntax syntax) { return(!syntax.IsAutoProperty() && !syntax.IsLambdaProperty() && !syntax.IsExplicitInterfaceProperty()); }