using System.Collections.Generic; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp.Syntax; namespace Speckle.InterfaceGenerator; internal class SyntaxReceiver : ISyntaxReceiver { public IList CandidateTypes { get; } = new List(); public void OnVisitSyntaxNode(SyntaxNode syntaxNode) { if ( syntaxNode is TypeDeclarationSyntax typeDeclarationSyntax && IsClassOrRecord(typeDeclarationSyntax) && typeDeclarationSyntax.AttributeLists.Count > 0 ) { CandidateTypes.Add(typeDeclarationSyntax); } } private static bool IsClassOrRecord(TypeDeclarationSyntax typeDeclarationSyntax) { return typeDeclarationSyntax is ClassDeclarationSyntax || typeDeclarationSyntax is RecordDeclarationSyntax; } }