package synthesijer.ast.expr;
import java.util.ArrayList;
import synthesijer.ast.Expr;
import synthesijer.ast.Scope;
import synthesijer.ast.Type;
import synthesijer.ast.Variable;
import synthesijer.ast.type.PrimitiveTypeKind;
public class NewClassExpr extends Expr{
private String clazz;
private ArrayList<Expr> params = new ArrayList<>();
public NewClassExpr(Scope scope){
super(scope);
}
public void setClassName(String str){
clazz = str;
}
public void addParam(Expr expr){
params.add(expr);
}
public String getClassName(){
return clazz;
}
public ArrayList<Expr> getParameters(){
return params;
}
public void accept(SynthesijerExprVisitor v){
v.visitNewClassExpr(this);
}
@Override
public boolean isConstant() {
return false;
}
@Override
public boolean isVariable() {
return false;
}
@Override
public Type getType() {
return PrimitiveTypeKind.DECLARED;
}
@Override
public Variable[] getSrcVariables(){
ArrayList<Variable> list = new ArrayList<>();
for(Expr expr: params){
for(Variable var: expr.getSrcVariables()) list.add(var);
}
return list.toArray(new Variable[]{});
}
@Override
public Variable[] getDestVariables(){
return new Variable[]{};
}
@Override
public boolean hasMethodInvocation() {
for(Expr expr: params){
if(expr.hasMethodInvocation()) return true;
}
return false;
}
}