Newer
Older
import org.checkerframework.checker.nullness.qual.NonNull;
import org.jetbrains.annotations.NotNull;
import tfm.utils.Utils;
protected Set<String> declaredVariables;
protected Set<String> definedVariables;
protected Set<String> usedVariables;
node.getAstNode(),
node.getDeclaredVariables(),
node.getDefinedVariables(),
node.getUsedVariables()
);
public GraphNode(int id, String instruction, @NotNull N astNode) {
astNode,
Utils.emptySet(),
Utils.emptySet(),
Utils.emptySet()
);
}
Set<String> declaredVariables,
Set<String> definedVariables,
Set<String> usedVariables
) {
this.declaredVariables = declaredVariables;
this.definedVariables = definedVariables;
this.usedVariables = usedVariables;
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);
return String.format("GraphNode{id: %s, instruction: '%s'}",
}
public void setAstNode(N node) {
this.astNode = node;
}
return astNode.getBegin()
.map(begin -> begin.line);
}
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(getId(), other.getId())
&& Objects.equals(getInstruction(), other.getInstruction())
}
@Override
public int hashCode() {
return Objects.hash(getId(), getInstruction(), getAstNode());
String text = getInstruction().replace("\\", "\\\\")
.replace("\"", "\\\"");
return String.format("%s[label=\"%s: %s\"];", getId(), getId(), text);
public Set<String> getDeclaredVariables() {
return declaredVariables;
}
public Set<String> getDefinedVariables() {
return definedVariables;
}
public Set<String> getUsedVariables() {
return usedVariables;
}
public String getInstruction() {
return instruction;
public void setInstruction(String instruction) {
this.instruction = instruction;