public AnalysisResult <List <CSharpControllerModel> > Analyze(string path) { var models = new List <CSharpControllerModel>(); _context.Init(path); var isDotNetCore = ProjectHelper.IsDotNetCoreProject(_context.Compilation); var documents = _context.Project.Documents .Where(d => d.Name.Contains("Controller")) .ToList(); var syntaxTrees = documents .Select(d => d.GetSyntaxTreeAsync().Result) .ToList(); foreach (var syntaxTree in syntaxTrees) { var root = syntaxTree.GetRoot(); var semanticModel = _context.Compilation.GetSemanticModel(syntaxTree); var classNodes = root.DescendantNodes().OfType <ClassDeclarationSyntax>().ToList(); foreach (var classNode in classNodes) { var classSymbol = semanticModel.GetDeclaredSymbol(classNode) as INamedTypeSymbol; models.Add(AnalyzeController(classSymbol, isDotNetCore)); } } return(new AnalysisResult <List <CSharpControllerModel> >() { Value = models, Success = true }); }
public AnalysisResult <CSharpDataModels> Analyze(string path) { var models = new CSharpDataModels(); _context.Init(path); var graph = BuildTypeDependencyGraph(); var readable = graph.ToReadable(); var types = graph.Vertices; foreach (var type in types) { if (type.IsExternal) { continue; } var dependencies = graph.OutgoingEdges(type) .Select(e => e.Destination) .Where(d => d.TypeKind == TypeKind.Class || d.TypeKind == TypeKind.Enum) .ToList(); var semanticModel = type.SemanticModel; if (semanticModel == null) { if (type.NamedTypeSymbol != null) { if (type.TypeKind == TypeKind.Enum) { models.Enums.Add(AnalyzeEnumSymbol(type.NamedTypeSymbol)); } } } else { var syntaxTree = semanticModel.SyntaxTree; if (type.TypeKind == TypeKind.Class) { //var classModel = new CSharpClassModel() { Name = type.Name }; //HandleInheritance(classModel, type.NamedTypeSymbol); //HandleGenerics(classModel, type.NamedTypeSymbol); //var internalDependencies = dependencies // .Where(d => !d.IsExternal) // .Select(d => d.NamedTypeSymbol) // .ToList(); //HandleDependencies(classModel, internalDependencies); //var propertyNodes = syntaxTree.GetRoot().DescendantNodes().OfType<PropertyDeclarationSyntax>().ToList(); //foreach (var propertyNode in propertyNodes) //{ // var propertySymbol = semanticModel.GetDeclaredSymbol(propertyNode) as IPropertySymbol; // var property = new CSharpPropertyModel(); // property.Name = propertySymbol.Name; // property.Type = _typeAnalyzer.AnalyzePropertyType(propertySymbol.Type); // classModel.Properties.Add(property); //} // models.Classes.Add(classModel); models.Classes.Add(AnalyzeClassSymbol(type.NamedTypeSymbol)); } else if (type.TypeKind == TypeKind.Enum) { models.Enums.Add(AnalyzeEnumSymbol(type.NamedTypeSymbol)); } } } return(new AnalysisResult <CSharpDataModels>() { Value = models, Success = true }); }