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, });
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); }