foss-vuln-tracker/molerat/src/main/java/it/unitn/molerat/repos/trackers/vuln/FixStatisticsVulnerabilityE...

72 lines
2.2 KiB
Java

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<VulnerabilityEvidence> getInitialVulnerabilityEvidence(Changes changes) throws Exception {
return null;
}
@Override
protected Set<VulnerabilityEvidence> getVulnerabilityEvidence(String currentEvidenceCommit, String previousEvidenceCommit, Set<Changes> changes) throws Exception {
return null;
}
@Override
public void trackEvidence() throws Exception {
this.changes = filterNonJavaChanges(this.changes);
Iterator<Changes> it = changes.iterator();
while (it.hasNext()) {
Changes currentChanges = it.next();
touchedFiles++;
addedLines += currentChanges.getAdditions().size();
deletedLines += currentChanges.getDeletions().size();
Set<String> methods = new HashSet<>();
Set<VulnerabilityEvidence> 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;
}
}