22
33import org .eclipse .jgit .revwalk .RevCommit ;
44import org .tinylog .Logger ;
5- import org .variantsync .diffdetective .analysis .AnalysisResult ;
6- import org .variantsync .diffdetective .analysis .CommitHistoryAnalysisTask ;
7- import org .variantsync .diffdetective .analysis .CommitProcessTime ;
8- import org .variantsync .diffdetective .analysis .HistoryAnalysis ;
5+ import org .variantsync .diffdetective .analysis .*;
96import org .variantsync .diffdetective .diff .CommitDiff ;
107import org .variantsync .diffdetective .diff .PatchDiff ;
118import org .variantsync .diffdetective .diff .difftree .DiffTree ;
1411import org .variantsync .diffdetective .diff .difftree .transform .DiffTreeTransformer ;
1512import org .variantsync .diffdetective .diff .result .CommitDiffResult ;
1613import org .variantsync .diffdetective .metadata .ExplainedFilterSummary ;
14+ import org .variantsync .diffdetective .pattern .elementary .ElementaryPattern ;
1715import org .variantsync .diffdetective .pattern .elementary .proposed .ProposedElementaryPatterns ;
1816import org .variantsync .diffdetective .util .Clock ;
1917import org .variantsync .diffdetective .util .FileUtils ;
@@ -34,6 +32,7 @@ public AnalysisResult call() throws Exception {
3432 final Clock totalTime = new Clock ();
3533
3634 final List <CommitProcessTime > commitTimes = new ArrayList <>(HistoryAnalysis .COMMITS_TO_PROCESS_PER_THREAD_DEFAULT );
35+ final List <PatchStatistics > patchStatistics = new ArrayList <>(HistoryAnalysis .COMMITS_TO_PROCESS_PER_THREAD_DEFAULT );
3736 final Clock commitProcessTimer = new Clock ();
3837
3938 totalTime .start ();
@@ -61,6 +60,8 @@ public AnalysisResult call() throws Exception {
6160 // Count elementary patterns
6261 int numDiffTrees = 0 ;
6362 for (final PatchDiff patch : commitDiff .getPatchDiffs ()) {
63+ final PatchStatistics thisPatchesStatistics = new PatchStatistics (patch , ProposedElementaryPatterns .Instance );
64+
6465 if (patch .isValid ()) {
6566 final DiffTree t = patch .getDiffTree ();
6667 DiffTreeTransformer .apply (exportOptions .treePreProcessing (), t );
@@ -72,15 +73,19 @@ public AnalysisResult call() throws Exception {
7273
7374 t .forAll (node -> {
7475 if (node .isCode ()) {
76+ final ElementaryPattern nodePattern = ProposedElementaryPatterns .Instance .match (node );
7577 miningResult .elementaryPatternCounts .reportOccurrenceFor (
76- ProposedElementaryPatterns . Instance . match ( node ) ,
78+ nodePattern ,
7779 commitDiff
7880 );
81+ thisPatchesStatistics .elementaryPatternCount ().increment (nodePattern );
7982 }
8083 });
8184
8285 ++numDiffTrees ;
8386 }
87+
88+ patchStatistics .add (thisPatchesStatistics );
8489 }
8590 miningResult .exportedTrees += numDiffTrees ;
8691 miningResult .filterHits .append (new ExplainedFilterSummary (exportOptions .treeFilter ()));
@@ -106,6 +111,7 @@ public AnalysisResult call() throws Exception {
106111 miningResult .runtimeInSeconds = totalTime .getPassedSeconds ();
107112 miningResult .exportTo (FileUtils .addExtension (options .outputPath (), AnalysisResult .EXTENSION ));
108113 exportCommitTimes (commitTimes , FileUtils .addExtension (options .outputPath (), COMMIT_TIME_FILE_EXTENSION ));
114+ exportPatchStatistics (patchStatistics , FileUtils .addExtension (options .outputPath (), PATCH_STATISTICS_EXTENSION ));
109115 return miningResult ;
110116 }
111117}
0 commit comments