package it.unitn.molerat.repos.trackers.vuln; import it.unitn.molerat.evidence.Changes; import it.unitn.molerat.evidence.VulnerabilityEvidence; import it.unitn.molerat.repos.wrappers.RepoWrapper; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class FixStatisticsVulnerabilityEvidenceTracker extends VulnerabilityEvidenceTracker { private int addedLines = 0; private int deletedLines = 0; private int touchedFiles = 0; private int touchedMethods = 0; public FixStatisticsVulnerabilityEvidenceTracker(RepoWrapper wrapper, String fixedRev) throws Exception { super(wrapper, fixedRev); } @Override protected Set getInitialVulnerabilityEvidence(Changes changes) throws Exception { return null; } @Override protected Set getVulnerabilityEvidence(String currentEvidenceCommit, String previousEvidenceCommit, Set changes) throws Exception { return null; } @Override public void trackEvidence() throws Exception { this.changes = filterNonJavaChanges(this.changes); Iterator it = changes.iterator(); while (it.hasNext()) { Changes currentChanges = it.next(); touchedFiles++; addedLines += currentChanges.getAdditions().size(); deletedLines += currentChanges.getDeletions().size(); Set methods = new HashSet<>(); Set evidences = recordVulnerabilityEvidenceForRightFile(currentChanges.getAdditions(), currentChanges); evidences.addAll(recordVulnerabilityEvidence(currentChanges.getDeletions(), currentChanges)); for (VulnerabilityEvidence evd : evidences) { if (!evd.getLineContents().contains("private") && !evd.getLineContents().contains("protected") && !evd.getLineContents().contains("public")) { methods.add(evd.getContainer()); } } touchedMethods += methods.size(); commits.add(currentChanges.getLeftRevision()); } } public int getNumberOfAddedLines() { return addedLines; } public int getNumberOfDeletedLines() { return deletedLines; } public int getNumberOfTouchedMethods() { return touchedMethods; } public int getNumberOfTouchedFiles() { return touchedFiles; } }