Newer
Older
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Optional;
public class Node<ASTNode extends com.github.javaparser.ast.Node> extends Vertex<String, ArcData> {
protected Set<String> declaredVariables;
protected Set<String> definedVariables;
protected Set<String> usedVariables;
public <N extends Node<ASTNode>> Node(N node) {
this(node.getId(), node.getData(), node.getAstNode());
public Node(int id, String representation, @NonNull ASTNode astNode) {
this.declaredVariables = new HashSet<>();
this.definedVariables = new HashSet<>();
this.usedVariables = new HashSet<>();
if (astNode instanceof Statement) {
extractVariables((Statement) astNode);
}
}
private void extractVariables(@NonNull Statement statement) {
new VariableExtractor()
.setOnVariableDeclarationListener(variable -> this.declaredVariables.add(variable))
.setOnVariableDefinitionListener(variable -> this.definedVariables.add(variable))
.setOnVariableUseListener(variable -> this.usedVariables.add(variable))
.visit(statement);
}
public int getId() {
return Integer.parseInt(getName());
}
public String toString() {
return String.format("Node{id: %s, data: '%s', in: %s, out: %s}",
getName(),
getData(),
getIncomingArrows().stream().map(arrow -> arrow.getFrom().getName()).collect(Collectors.toList()),
getOutgoingArrows().stream().map(arc -> arc.getTo().getName()).collect(Collectors.toList()));
}
public ASTNode getAstNode() {
return astNode;
}
return astNode.getBegin().isPresent() ? Optional.of(astNode.getBegin().get().line) : Optional.empty();
}
public void addDeclaredVariable(String variable) {
declaredVariables.add(variable);
}
public void addDefinedVariable(String variable) {
definedVariables.add(variable);
}
public void addUsedVariable(String variable) {
usedVariables.add(variable);
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
return Objects.equals(getData(), other.getData())
&& Objects.equals(getIncomingArrows(), other.getIncomingArrows())
&& Objects.equals(getOutgoingArrows(), other.getOutgoingArrows())
&& Objects.equals(astNode, other.astNode);
// && Objects.equals(getName(), other.getName()) ID IS ALWAYS UNIQUE, SO IT WILL NEVER BE THE SAME
}
public String toGraphvizRepresentation() {
return String.format("%s[label=\"%s: %s\"];", getId(), getId(), getData());
}
public Set<String> getDeclaredVariables() {
return declaredVariables;
}
public Set<String> getDefinedVariables() {
return definedVariables;
}
public Set<String> getUsedVariables() {
return usedVariables;
}