예제 #1
0
 public override void VisitAttribute(AttributeSyntax node)
 {
     if (this.semanticModel.TryGetNamedType(node, KnownSymbols.XmlnsDefinitionAttribute, this.cancellationToken, out _))
     {
         if (node.TryFindArgument(1, KnownSymbols.XmlnsDefinitionAttribute.ClrNamespaceArgumentName, out var arg))
         {
             if (this.semanticModel.TryGetConstantValue <string>(arg.Expression, this.cancellationToken, out var @namespace))
             {
                 this.mappedNamespaces.Add(@namespace);
             }
         }
     }
 }
예제 #2
0
        private static AttributeListSyntax CreateAttribute(string @namespace, AttributeSyntax attribute)
        {
            var list = attribute.FirstAncestorOrSelf <AttributeListSyntax>();

            if (list?.Attributes.Count != 1)
            {
                return(null);
            }

            if (!attribute.TryFindArgument(1, KnownSymbols.XmlnsDefinitionAttribute.ClrNamespaceArgumentName, out AttributeArgumentSyntax oldArgument))
            {
                return(null);
            }

            var newArgument = oldArgument.WithExpression(SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal(@namespace)));

            return(list.WithAttributes(SyntaxFactory.SingletonSeparatedList(attribute.ReplaceNode(oldArgument, newArgument))).WithAdditionalAnnotations(Formatter.Annotation));
        }