package ast;
import java.util.ArrayList;
import java.util.List;
import models.algebra.Type;
public class VariableDeclarationStatement extends Statement {
private List<Integer> modifiers = new ArrayList<>();
private Type type = null;
private List<VariableDeclaration> fragments = new ArrayList<>();
public List<Integer> getModifiers() {
return modifiers;
}
public void setModifiers(List<Integer> modifiers) {
this.modifiers = modifiers;
}
public Type getType() {
return type;
}
public void setType(Type type) {
this.type = type;
}
public List<VariableDeclaration> getFragments() {
return fragments;
}
public void addFragment(VariableDeclaration fragment) {
if (fragment == null) return;
if (this.type == null) {
this.type = fragment.getType();
this.fragments.add(fragment);
} else {
if (this.type.equals(fragment.getType())) {
this.fragments.add(fragment);
} else {
System.err.println("Type mismatch: " + fragment);
}
}
}
public void setFragments(List<VariableDeclaration> fragments) {
this.fragments = fragments;
if (fragments != null && !fragments.isEmpty()) {
this.type = fragments.get(0).getType();
} else {
this.type = null;
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (Integer mod : modifiers) {
if (mod == Modifier.PRIVATE) sb.append("private ");
else if (mod == Modifier.PUBLIC) sb.append("public ");
else if (mod == Modifier.PROTECTED) sb.append("protected ");
else if (mod == Modifier.STATIC) sb.append("static ");
}
if (this.type != null) {
sb.append(this.type.getInterfaceTypeName()).append(" ");
}
for (int i = 0; i < fragments.size(); i++) {
sb.append(fragments.get(i).toString());
if (i < fragments.size() - 1) sb.append(", ");
}
sb.append(";");
return sb.toString();
}
}