@@ -30,35 +30,37 @@ public static async Task Analyze(AnalyzerConfig config)
3030 Console . WriteLine ( $ "Analyzer ready to analyze { projectAnalyzers . Count ( ) } project/s.") ;
3131
3232 var workspace = new AdhocWorkspace ( ) ;
33- var isDelete = config . IsDelete ;
34- short index = 1 ;
35- foreach ( var projectAnalyzer in projectAnalyzers )
33+ var projects = new List < ( Project , IProjectAnalyzer ) > ( ) ;
34+
35+ var sortedProjectAnalyzers = projectAnalyzers ; // TODO sort
36+
37+ foreach ( var projectAnalyzer in sortedProjectAnalyzers )
3638 {
37- var triples = await AnalyzeProject ( index , workspace , projectAnalyzer , config . Tier ) ;
38- if ( triples . Count > 0 )
39- {
40- await DbManager . InsertData ( triples , config . Credentials , isDelete ) ;
41- }
42- index ++ ;
43- isDelete = false ;
39+ var project = projectAnalyzer . AddToWorkspace ( workspace ) ;
40+ projects . Add ( ( project , projectAnalyzer ) ) ;
41+ }
42+ for ( var index = 0 ; index < projects . Count ; index ++ )
43+ {
44+ var triples = await AnalyzeProject ( index + 1 , projects [ index ] , config . Tier ) ;
45+ triples = triples . GroupBy ( x => x . ToString ( ) ) . Select ( x => x . First ( ) ) . OrderBy ( x => x . NodeA . Label ) . ToList ( ) ;
46+ await DbManager . InsertData ( triples , config . Credentials , config . IsDelete && index == 0 ) ;
4447 }
4548 workspace . Dispose ( ) ;
4649 }
4750
48- private static async Task < IList < Triple > > AnalyzeProject ( short index , AdhocWorkspace workspace , IProjectAnalyzer projectAnalyzer , Tiers mode )
51+ private static async Task < IList < Triple > > AnalyzeProject ( int index , ( Project project , IProjectAnalyzer projectAnalyzer ) item , Tiers mode )
4952 {
5053 Console . WriteLine ( $ "Project #{ index } :") ;
51- var project = projectAnalyzer . AddToWorkspace ( workspace ) ;
52- var root = GetRoot ( project . FilePath ) ;
54+ var root = GetRoot ( item . project . FilePath ) ;
5355 var rootNode = new FolderNode ( root , root ) ;
54- var projectName = GetProjectName ( project . Name ) ;
56+ var projectName = GetProjectName ( item . project . Name ) ;
5557 Console . WriteLine ( $ "Analyzing { projectName } project...") ;
5658
5759 var triples = new List < Triple > ( ) ;
5860 if ( mode == Tiers . All || mode == Tiers . Project )
5961 {
6062 Console . WriteLine ( $ "Analyzing Project tier...") ;
61- var projectBuild = projectAnalyzer . Build ( ) . FirstOrDefault ( ) ;
63+ var projectBuild = item . projectAnalyzer . Build ( ) . FirstOrDefault ( ) ;
6264 var projectNode = new ProjectNode ( projectName ) ;
6365 triples . Add ( new TripleIncludedIn ( projectNode , rootNode ) ) ;
6466 projectBuild . ProjectReferences . ToList ( ) . ForEach ( x =>
@@ -75,20 +77,19 @@ private static async Task<IList<Triple>> AnalyzeProject(short index, AdhocWorksp
7577 Console . WriteLine ( $ "Analyzing Project tier complete.") ;
7678 }
7779
78- if ( project . SupportsCompilation
80+ if ( item . project . SupportsCompilation
7981 && ( mode == Tiers . All || mode == Tiers . Code ) )
8082 {
8183 Console . WriteLine ( $ "Analyzing Code tier...") ;
82- var compilation = await project . GetCompilationAsync ( ) ;
83- var syntaxTreeRoot = compilation . SyntaxTrees ;
84+ var compilation = await item . project . GetCompilationAsync ( ) ;
85+ var syntaxTreeRoot = compilation . SyntaxTrees . Where ( x => ! x . FilePath . Contains ( "obj" ) ) ;
8486 foreach ( var st in syntaxTreeRoot )
8587 {
8688 var sem = compilation . GetSemanticModel ( st ) ;
87- Extractor . AnalyzeTree < ClassDeclarationSyntax > ( triples , st , sem , rootNode ) ;
8889 Extractor . AnalyzeTree < InterfaceDeclarationSyntax > ( triples , st , sem , rootNode ) ;
90+ Extractor . AnalyzeTree < ClassDeclarationSyntax > ( triples , st , sem , rootNode ) ;
8991 }
9092 Console . WriteLine ( $ "Analyzing Code tier complete.") ;
91- triples = triples . GroupBy ( x => x . ToString ( ) ) . Select ( x => x . First ( ) ) . ToList ( ) ;
9293 }
9394
9495 Console . WriteLine ( $ "Analyzing { projectName } project complete.") ;
0 commit comments