foss-vuln-tracker/repoman/src/main/java/it/unitn/repoman/core/lang/traversals/generic/ScopesTraversal.java

57 lines
1.5 KiB
Java
Executable File

package it.unitn.repoman.core.lang.traversals.generic;
import java.util.Set;
import java.util.HashSet;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
public class ScopesTraversal extends DFSTraversal {
private Set<ParserRuleContext> fields = new HashSet<>();
private Set<ParserRuleContext> methods = new HashSet<>();
private int currentLine = 0;
private int totalLines = 0;
private final Set<Integer> collectableLines = new HashSet<>();
public ScopesTraversal(ParserRuleContext root) {
traverse(root);
}
@Override
public void onEnterNode(ParseTree node) {
//collect all "collectable" lines
if (wrapper.isCollectable(node)) {
int line = ((ParserRuleContext)node).getStart().getLine();
this.collectableLines.add(line);
}
if (wrapper.isRuleContext(node)) {
int lookupLine = ((ParserRuleContext)node).getStart().getLine();
if (currentLine != lookupLine) {
currentLine = lookupLine;
this.totalLines++;
}
}
if (wrapper.isFieldDeclaration(node)) {
fields.add((ParserRuleContext)node);
}
if (wrapper.isMethodDeclaration(node)) {
methods.add((ParserRuleContext)node);
}
}
public Set<ParserRuleContext> getScopes() {
return this.methods;
}
public Set<ParserRuleContext> getFields() {
return this.fields;
}
public int getTotalLinesCount() {
return this.totalLines;
}
public Set<Integer> getCollectableLines() {
return this.collectableLines;
}
}