internal void Analyze(FileModel fileModel) { List <ClassDeclarationSyntax> classDeclarationSyntaxes = SyntaxTree .GetRoot() .DescendantNodes() .OfType <ClassDeclarationSyntax>() .ToList(); foreach (ClassDeclarationSyntax classDeclarationSyntax in classDeclarationSyntaxes) { ClassModel classModel = new ClassModel { Name = classDeclarationSyntax.Identifier.ValueText, Fqn = SemanticModel.GetDeclaredSymbol(classDeclarationSyntax).ToString() }; INamedTypeSymbol namedTypeSymbol = SemanticModel.GetDeclaredSymbol(classDeclarationSyntax) as INamedTypeSymbol; classModel.BaseType = namedTypeSymbol.BaseType.ToString(); classModel.Accessibility = namedTypeSymbol.DeclaredAccessibility.ToString(); classModel.Abstract = namedTypeSymbol.IsAbstract; classModel.Sealed = namedTypeSymbol.IsSealed; classModel.Static = namedTypeSymbol.IsStatic; classModel.Md5 = BuildMD5(classDeclarationSyntax.GetText().ToString()); classModel.FirstLineNumber = classDeclarationSyntax.GetLocation().GetLineSpan().StartLinePosition.Line + 1; classModel.LastLineNumber = classDeclarationSyntax.GetLocation().GetLineSpan().EndLinePosition.Line + 1; foreach (INamedTypeSymbol interfaceTypeSymbol in namedTypeSymbol.Interfaces) { classModel.ImplementedInterfaces.Add(interfaceTypeSymbol.ToString()); } _fieldAnalyzer.Analyze(classDeclarationSyntax, classModel); _methodAnalyzer.Analyze(classDeclarationSyntax, classModel); _constructorAnalyzer.Analyze(classDeclarationSyntax, classModel); fileModel.Classes.Add(classModel); } }
internal void Analyze(FileModel fileModel) { List <InterfaceDeclarationSyntax> interfaceDeclarationSyntaxes = SyntaxTree .GetRoot() .DescendantNodes() .OfType <InterfaceDeclarationSyntax>() .ToList(); foreach (InterfaceDeclarationSyntax interfaceDeclarationSyntax in interfaceDeclarationSyntaxes) { InterfaceModel interfaceModel = new InterfaceModel { Name = interfaceDeclarationSyntax.Identifier.ValueText, Fqn = SemanticModel.GetDeclaredSymbol(interfaceDeclarationSyntax).ToString(), Md5 = BuildMD5(interfaceDeclarationSyntax.GetText().ToString()) }; INamedTypeSymbol namedTypeSymbol = SemanticModel.GetDeclaredSymbol(interfaceDeclarationSyntax) as INamedTypeSymbol; foreach (INamedTypeSymbol interfaceTypeSymbol in namedTypeSymbol.Interfaces) { interfaceModel.ImplementedInterfaces.Add(interfaceTypeSymbol.ToString()); } interfaceModel.Accessibility = namedTypeSymbol.DeclaredAccessibility.ToString(); interfaceModel.FirstLineNumber = interfaceDeclarationSyntax.GetLocation().GetLineSpan().StartLinePosition.Line + 1; interfaceModel.LastLineNumber = interfaceDeclarationSyntax.GetLocation().GetLineSpan().EndLinePosition.Line + 1; _constructorAnalyzer.Analyze(interfaceDeclarationSyntax, interfaceModel); fileModel.Interfaces.Add(interfaceModel); } }