Exemplo n.º 1
0
 /// <summary>
 /// Вызывается для каждого синтаксического узла в compilation, мы можем
 /// проверить узлы и сохранить информацию, полезную для генерации
 /// </summary>
 public void OnVisitSyntaxNode(SyntaxNode syntaxNode)
 {
     // любое поле с атрибутом -- кандидат на рассмотрение
     if (syntaxNode is FieldDeclarationSyntax fieldDeclarationSyntax &&
         fieldDeclarationSyntax.AttributeLists.Count > 0)
     {
         CandidateFields.Add(fieldDeclarationSyntax);
     }
 }
Exemplo n.º 2
0
        public void OnVisitSyntaxNode(SyntaxNode syntaxNode)
        {
            // Business logic to decide what we're interested in goes here
            if (syntaxNode is FieldDeclarationSyntax fds &&
                fds.AttributeLists.Count > 0)
            {
                CandidateFields.Add(fds);
            }

            // TODO: probably you will be interested in storing information about PrintAllFields method here
        }
Exemplo n.º 3
0
            /// <summary>
            /// Called for every syntax node in the compilation, we can inspect the nodes and save any information useful for generation
            /// </summary>
            public void OnVisitSyntaxNode(GeneratorSyntaxContext context)
            {
                // any field with at least one attribute is a candidate for property generation
                if
                (
                    context.Node is FieldDeclarationSyntax fieldDeclarationSyntax &&
                    fieldDeclarationSyntax.AttributeLists.Count > 0
                )
                {
                    CandidateFields.Add(fieldDeclarationSyntax);

                    foreach (VariableDeclaratorSyntax variable in fieldDeclarationSyntax.Declaration.Variables)
                    {
                        // Get the symbol being declared by the field, and keep it if its annotated
                        var fieldSymbol = context.SemanticModel.GetDeclaredSymbol(variable) as IFieldSymbol;
                        if (fieldSymbol.GetAttributes().Any(ad => ad.AttributeClass.ToDisplayString() == "TimeWarp.DelegateAttribute"))
                        {
                            Fields.Add(fieldSymbol);
                        }
                    }
                }
            }