private PropertyDeclarationSyntax GetPropertyNodeWithDiagnostic(SyntaxNode root, TextSpan diagnosticSpan)
        {
            SyntaxNode node = root?.FindNode(diagnosticSpan);

            return(node switch
            {
                PropertyDeclarationSyntax propertyDeclaration => propertyDeclaration,
                IdentifierNameSyntax propertyTypeDeclaration
                when propertyTypeDeclaration.Parent is PropertyDeclarationSyntax propertyDeclaration => propertyDeclaration,

                TypeSyntax propertyTypeDeclaration => propertyTypeDeclaration.Parent <PropertyDeclarationSyntax>(),
                AttributeListSyntax attributeListNode
                when attributeListNode.Parent is PropertyDeclarationSyntax propertyDeclaration => propertyDeclaration,

                AttributeSyntax attributeNode => attributeNode.Parent <PropertyDeclarationSyntax>(),
                _ => null,
            });
Example #2
0
        private void RegisterCodeFix(SyntaxNode root, AttributeSyntax attributeNode, CodeFixContext context)
        {
            PropertyDeclarationSyntax propertyNode = attributeNode.Parent <PropertyDeclarationSyntax>();

            context.CancellationToken.ThrowIfCancellationRequested();

            if (propertyNode == null)
            {
                return;
            }

            string codeActionName = nameof(Resources.PX1021PropertyFix).GetLocalized().ToString();

            CodeAction codeAction =
                CodeAction.Create(codeActionName,
                                  cToken => ChangePropertyTypeToAttributeType(context.Document, root, attributeNode, propertyNode, cToken),
                                  equivalenceKey: codeActionName);

            context.RegisterCodeFix(codeAction, context.Diagnostics);
        }