/**
*
*/
package soottocfg.cfg.expression;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.google.common.base.Preconditions;
import soottocfg.cfg.SourceLocation;
import soottocfg.cfg.type.Type;
import soottocfg.cfg.variable.Variable;
/**
* @author schaef
*
*/
public class IdentifierExpression extends Expression {
/**
*
*/
private static final long serialVersionUID = 4897450861767209309L;
private final Variable variable;
public IdentifierExpression(SourceLocation loc, Variable v) {
super(loc);
Preconditions.checkNotNull(v);
this.variable = v;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if (this.variable == null) {
sb.append("==NOT IMPLEMENTED==");
} else {
sb.append(this.variable.getName());
}
return sb.toString();
}
@Override
public Set<IdentifierExpression> getUseIdentifierExpressions() {
Set<IdentifierExpression> ret = new HashSet<IdentifierExpression>();
ret.add(this);
return ret;
}
@Override
public Set<Variable> getDefVariables() {
return getUseVariables();
}
public Variable getVariable() {
return variable;
}
@Override
public Type getType() {
return variable.getType();
}
@Override
public IdentifierExpression deepCopy() {
return new IdentifierExpression(getSourceLocation(), variable);
}
public IdentifierExpression substitute(Map<Variable, Variable> subs) {
if (subs.containsKey(variable)) {
return new IdentifierExpression(getSourceLocation(), subs.get(variable));
}
return new IdentifierExpression(getSourceLocation(), variable);
}
@Override
public Expression substituteVarWithExpression(Map<Variable, Expression> subs) {
if (subs.containsKey(variable)) {
return subs.get(variable).deepCopy();
}
return this.deepCopy();
}
public boolean sameVariable(IdentifierExpression other) {
return this.variable.equals(other.variable);
}
}